如何使用引用作为条件进行NHibernate查询?

3

我想通过NHibernate进行查询,其中结果的条件取决于一个引用表。我该如何做?让我们看一个简单的例子:

public class Foo
{ 
    public int Id { get; set; }
    public string Name { get; set; }
    public Bar ReferencedBar { get; set; }
}    

public class Bar
{ 
    public int Id { get; set; }
    public string Name { get; set; }
}

然后将Foo映射到Bar:

public class FooMapping : ClassMap<Foo>
{
    public FooMapping()
    {
        Id(c => c.Id).GeneratedBy.HiLo("1");
        Map(c => c.Name).Not.Nullable().Length(100);
        References(c => c.Bar);
    }
}

现在我想从数据库中获取所有引用特定 Bar 的 Foo。这个函数使用了 Criteria,但如果您认为有更好的方法,请提供其他示例:

public IList<Foo> GetAllFoosReferencingBar(Bar bar)
{
    using (var tx = Session.BeginTransaction())
    {
        var result = Session.CreateCriteria(typeof(Foo))
            .Add(Restrictions./* foo.ReferencedBar == bar */) // <-- How to add restriction using reference? 
            .List<Foo>();
        tx.Commit();
        return result; 
    }
}
1个回答

2

实际上这比人们想象的要简单。只需使用属性名称和对象直接添加等于限制条件即可:

public IList<Foo> GetAllFoosReferencingBar(Bar bar)
{
    using (var tx = Session.BeginTransaction())
    {
        var result = Session.CreateCriteria(typeof(Foo))
            .Add(Restrictions.Eq("ReferencedBar", bar) // <--- Added restriction
            .List<Foo>();
        tx.Commit();
        return result; 
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接