2010-10-22 79 views
0

我有一些問題映射fluentnhibernate中複雜的多對多關係。我有一個傳統的數據庫,看起來像這樣:Nhibernate ManyToMany與動態where子句

Foos:| | Id | Foo |

FooBars:| | FooId | BarId |

酒吧:| | Id |酒吧| CultureId |

而我試圖映射到以下對象模型:

class Foo 
{ 
    property virtual int Id { get; set; } 
    property virtual string Foo { get; set; } 
    property virtual IList<Bar> Bars { get; set; } 
} 

class Bar 
{ 
    property virtual int Id { get; set; } 
    property virtual int CultureId { get; set; } 
} 

與映射:

public class FooMapping : ClassMap<Foo> 
{ 
    public FooMapping() 
    { 
     Table("foos"); 
     Id(v => v.Id); 
     Map(v => v.Foo); 

     HasManyToMany(v => v.Bars) 
      .Table("FooBars") 
      .ParentKeyColumn("FooId") 
      .ChildKeyColumn("BarId") 
      .Cascade.All(); 
    } 
} 

public class BarMapping : ClassMap<Bar> 
{ 
    public BarMapping() 
    { 
     Table("bars"); 
     Id(v => v.Id); 
     Map(v => v.Bar); 
     Map(v => v.CultureId); 
    } 
} 

的問題是我有多個酒吧與同一ID爲不同CultureIds

eg

我將有一個表,看起來像:

ID |酒吧| CultureId

1,你好,1

1,卓悅,2

1,Gutentag,3

此刻,上表的Bars屬性將返回3個元素,但其Bar屬性將爲所有三個元素返回「Hello」(可能是因爲它們是a會有相同的身份)。所以我的問題是,我該如何阻止這種情況發生任何人都可以提出一種篩選沒有正確文化標識的行的方法(注意,這是基於當前文化的動態&)?

回答

0

您不能在映射中創建動態where子句。您將需要查詢此集合,而不是使用Criteria或HQL查詢通過父級訪問它。你可以閱讀filters,但他們仍然需要查詢。