如何使用流畅的nhibernate映射此1:1关系,而无需应用程序级别的额外执行代码或1:多映射?

时间:2016-11-19 15:29:23

标签: c# nhibernate fluent-nhibernate

我的数据库中有2个表:

  • 团队表(ID,名称,WebsiteId(可空))
  • 网站表(身份证,姓名)

网站可以与团队保持一致,但并非必须如此。团队可以与网站保持一致,但并不是必须的。所以两者之间的关系是一方面都没有。

最初,我能看到这样做的唯一方法是通过这样做来创建一对多的映射:

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映射这个的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

这不是专门针对NHibernate的,而是一个应该可以正常工作的解决方案,但你可以创建一个包含两者之间关系的第三个表。

网站表团队表都会与关系表保持一对一的关系。

然后你可以在这个中间表中使用一个mentioned in the comments之类的关系。

所以: Team_WebSite (TeamId,WebSiteId)