14

我是 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)或未来版本中的任何东西?

4

5 回答 5

9

就像 Google Ninja 说的,你可以用 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(我认为,不确定特定的修订版)。

于 2008-12-04T19:33:56.563 回答
6

如果您还不想使用 Linq to NHibernate,有几个替代方法可以获取强类型 Criteria 查询:

于 2008-12-07T04:30:24.417 回答
4

您可能可以使用 NHibernate.Linq 做到这一点。它是可用的形式,但距离完成还有一段距离。它目前居住在 nhcontrib 中,获得它的唯一方法是将其从 svn 中拉出https://nhcontrib.svn.sourceforge.net/svnroot/nhcontrib/trunk/src/NHibernate.Linq/

于 2008-12-04T17:14:39.480 回答
1

看看这个问题。有人有同样的担心,据我所知,NHibernate.Linq 还活着。

于 2008-12-06T02:41:15.667 回答
1

您可以在此处(博客条目)此处(谷歌存储库)找到您要查找的内容

于 2009-07-28T10:07:20.390 回答