0

与功能NHibernate我可以说一个反对我的User类一对多的关系映射:功能NHibernate - HasOne随着Where子句

HasMany(x => x.Membership) 
    .KeyColumn("UserID") 
    .Where("Deleted = 0"); 

可正常工作,它不仅抓住了会员记录还没有被删除。没有说我有一个名为针对会员最新的现场在那里我知道这将每个用户返回一条记录,我想能够说:

HasOne(x => x.CurrentMembership) 
    .Where("Current = 1"); 

但没有Where方法。我知道我可以这样做代码说:

public virtual Membership CurrentMembership 
    { get { return Membership.Single(m => m.Current); } } 

但这不允许我对此属性执行LINQ查询。我刚刚接受了这个作为过去的限制,但它在性能方面确实开始咬我。

我真的很感激,如果有人可以帮忙。

回答

0
HasOne(x => x.CurrentMembership) 
    .Where("Current = 1"); 

如果实体与另一个实体具有“HasOne”关系,那么它只有一件事可以链接到,所以Where方法没有意义。如果你的代码偶然不会更新旧的成员为Current = 0,那么将会有2个CurrentMembership实例可以链接到,你会非常容易搞砸。

我认为你的数据库设计有问题。我能想到的实现这个最好的方法是在你的用户表上有一个CurrentMembershipID,然后你可以用HasOne直接链接到它。这对于您的数据库而言是较少的开销(您不必在会员表中存储当前列),并且它将有效地执行您要查找的内容。此外,它避免了拥有多个成员资格且电流设置为1的用户。

+0

干杯我认为这是要走的路。 – nfplee