I'm a newbie in the great world of NHibernate. I'm using version 2.0.1.GA. Here's my question. I have a table Cars
with column Manufacturer(nvarchar(50))
and a primary key ID(int)
. My .NET class is:
public class Car
{
public virtual int ID { get; set; }
public virtual string Manufacturer { get; set; }
}
Now if I want to retrieve all cars made by Mercedes I have to type this:
using (var session = OpenSession())
{
var cars = session
.CreateCriteria(typeof(Car))
.Add(Restrictions.Like("Manufacturer", "Mercedes"))
.List();
// ...
}
I don't like the fact that I need to specify the property name as a string :( Is it possible to have something more refactor friendly probably (it's only a suggestion)?
var ms = session
.CreateCriteria<Car>()
.Add(c => c.Manufacturer, Restrictions.Like("Mercedes")
.List();
Anything like thins in the current version (2.0.1.GA) or in a future version?
You could probably do this with NHibernate.Linq. It is in a usable form, but still a ways from being complete. Its currently living inside nhcontrib, the only way to get it is to pull it out of svn here https://nhcontrib.svn.sourceforge.net/svnroot/nhcontrib/trunk/src/NHibernate.Linq/
Like Google Ninja said, you can do it with NHibernate.Linq. The query would then be:
session.Linq<Car>.Where(c => c.Manufacturer == "Mercedes").ToList()
If someone ends up here and is using NH3.0 the syntax is just a tad different (thanks to Michael Mrozek and Mike for the suggestion):
session.Query<Car>.Where(c => c.Manufacturer == "Mercedes").ToList()
I've used a binary that came bundled with fluent-nhibernate that works with 2.0GA (I think, not sure about the particular revision).
You can find what you are looking for here (blog entry) or here (google repository)
If you don't want to use Linq to NHibernate yet, there's a couple of alternatives to get strongly type Criteria queries:
Look at this question here. Someone had the same worry, and from I can gather, NHibernate.Linq is well alive.