我是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<Car>()
.Add(c => c.Manufacturer, Restrictions.Like("Mercedes")
.List();
当前版本(2.0.1.GA)或将来的版本中有什么类似的东西?
答案 0 :(得分:9)
就像谷歌忍者所说,你可以用NHibernate.Linq来做。 然后查询将是:
session.Linq<Car>.Where(c => c.Manufacturer == "Mercedes").ToList()
如果有人在这里结束并使用NH3.0,语法只是有点不同(感谢Michael Mrozek和Mike的建议):
session.Query<Car>.Where(c => c.Manufacturer == "Mercedes").ToList()
我使用了与fluent-nhibernate捆绑在一起的二进制文件,它与2.0GA配合使用(我认为,不确定特定版本)。
答案 1 :(得分:6)
如果您不想将Linq用于NHibernate,还有几种方法可以获得强类型Criteria查询:
答案 2 :(得分:4)
你可以用NHibernate.Linq做到这一点。它是一种可用的形式,但仍然是一种完整的方式。它目前居住在nhcontrib内部,获得它的唯一方法是将它从svn中拉出来https://nhcontrib.svn.sourceforge.net/svnroot/nhcontrib/trunk/src/NHibernate.Linq/
答案 3 :(得分:1)
看看this question here。有人有同样的担心,从我可以收集到的,NHibernate.Linq还活着。
答案 4 :(得分:1)