Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using LINQ with NHibernate

Ok, I think I have all my configurations right and now I am just trying to do a select query from the database selecting some data. Now I am using NHibernate 3.0 which I though by default support LINQ (or at least a good portion of link. Now every LINQ example I find has this code

session.Linq<User>()

but I for the life of me can't find how or where session is being set. Is this that proper why of doing in in 3.0 and if so how do I set sessions (what usings do I need, classes, methods, etc...)? If not, what is the proper way of using LINQ with NHibernate 3.0?

UPDATE:

Now I have the following code:

var configuration = new Configuration();
configuration.Configure();
configuration.AddAssembly(typeof(Tag).Assembly);
var sessionFactory = configuration.BuildSessionFactory();
var session = sessionFactory.GetCurrentSession();

but I get a compiler error saying that NHibernate.ISession does not have a definition for Linq. I have the follow usings:

using System.Collections.Generic;
using System.Web.Mvc;
using MyProject.Models;
using MyProject.ViewModels.Desktop;
using NHibernate.Cfg;

Am I missing something?

like image 383
ryanzec Avatar asked Jan 07 '11 00:01

ryanzec


2 Answers

You need to import the namespace:

using NHibernate.Linq;

Also, it's now:

session.Query<TEntity>();

instead of:

// Deprecated
session.Linq<TEntity>();
like image 193
codekaizen Avatar answered Oct 19 '22 12:10

codekaizen


You get a session from the NHibernate SessionFactory.CreateSession() method. Once you have one, you can then use either HQL queries, the NH query API or LINQ to access the data.

like image 39
Neil Barnwell Avatar answered Oct 19 '22 14:10

Neil Barnwell