我是NHibernate这个伟大世界的新手.我使用的是2.0.1.GA版.这是我的问题.我有一个Cars
包含列Manufacturer(nvarchar(50))
和主键的表ID(int)
.我的.NET类是:
public class Car { public virtual int ID { get; set; } public virtual string Manufacturer { get; set; } }
现在,如果我想要检索梅赛德斯生产的所有汽车,我必须输入:
using (var session = OpenSession()) { var cars = session .CreateCriteria(typeof(Car)) .Add(Restrictions.Like("Manufacturer", "Mercedes")) .List(); // ... }
我不喜欢这样的事实,我需要将属性名称指定为字符串:(是否可能有更多的重构友好(这只是一个建议)?
var ms = session .CreateCriteria() .Add(c => c.Manufacturer, Restrictions.Like("Mercedes") .List();
在当前版本(2.0.1.GA)或未来版本中有什么类似的东西?
就像Google Ninja所说,你可以用NHibernate.Linq来做.该查询将是:
session.Linq
如果有人在这里结束并使用NH3.0,语法只是有点不同(感谢Michael Mrozek和Mike提出的建议):
session.Query
我使用了一个与fluent-nhibernate捆绑在一起的二进制文件,它与2.0GA一起使用(我认为,不确定特定版本).
如果你还不想使用Linq到NHibernate,那么有两种方法可以获得强类型Criteria查询:
http://bugsquash.blogspot.com/2008/03/strongly-typed-nhibernate-criteria-with.html
http://www.kowitz.net/archive/2008/08/17/what-would-nhibernate-icriteria-look-like-in-.net-3.5.aspx