2010-10-22 50 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,但他们仍然需要查询。