我正在尝试通过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;
}
}
答案 0 :(得分:2)
这实际上比人们想象的要容易。只需使用属性名称和对象直接为批评添加Equal限制:
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;
}
}