2010-03-16 25 views
3

我想通過NHibernate做一個查詢,其中結果的標準取決於引用的表。我該怎麼做呢?讓我們來看一個簡單的例子:然後如何做參考作爲標準的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; } 
} 

美孚映射到酒吧:

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); 
    } 
} 

現在我想從其中引用特定的酒吧數據庫中獲取所有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; 
    } 
} 

回答

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; 
    } 
}