我的数据库中有2个表:
网站可以与团队保持一致,但并非必须如此。团队可以与网站保持一致,但并不是必须的。所以两者之间的关系是一方面都没有。
最初,我能看到这样做的唯一方法是通过这样做来创建一对多的映射:
WebsiteMap类
HasMany(x => x.Teams).AsBag().Inverse().Fetch.Select().BatchSize(50);
TeamMap类
References(x => x.WebSite).Nullable();
但为了纠正强制执行1:1映射,我必须在我的网站类中执行此操作,我有此代码:
public virtual Team Team
{
get
{
return Teams.FirstOrDefault();
}
}
如何在映射层本身中正确描述此关系以避免必须进行此转换?
这里的关键是这些表中的一个不是另一个的奴隶。我在互联网上看到的所有关于1:1 mappinges和流利的nhibernate的例子假设第二个表不存在第一个表(如User表和UserPreferences表),但这不是我的情况。
在我上面的例子中,因为它的双面都可以是主或者奴隶? 用流利的nhibernate映射这个的正确方法是什么?
答案 0 :(得分:1)
这不是专门针对NHibernate的,而是一个应该可以正常工作的解决方案,但你可以创建一个包含两者之间关系的第三个表。
网站表和团队表都会与关系表保持一对一的关系。
然后你可以在这个中间表中使用一个mentioned in the comments之类的关系。
所以: Team_WebSite (TeamId,WebSiteId)