【问题标题】:NHibernate one-to-many relationship without bidirectional associationNHibernate 一对多关系,没有双向关联
【发布时间】:2013-10-25 01:05:36
【问题描述】:

我的理解是否正确,以下类和表设计在 NHibernate 中是不可能的:

public class Parent
{
   public virtual Guid Id { get; set; }
   public virtual ISet<Child> Children { get; set; }
   ...
}

public class Child
{
   public virtual Guid Id { get; set; }
   ...
}

table Parent { Id, ... }
table Child { Id, ParentId (not null), ... }

所以请注意以下几点:

  • 父母和孩子之间的一对多关联
  • 使用 ISet
  • 没有从 Child 到 Parent 的双向关联
  • 孩子的 ParentId 列不为空

【问题讨论】:

    标签: nhibernate


    【解决方案1】:

    我的下意识反应是说它得到了支持,但我认为你是对的。您的选择是 - 双向关系或子表中可为空的 ParentId 列。

    这是一个有趣的线程,Ayende 在 NH 的错误跟踪器中进入它 http://nhjira.koah.net/browse/NH-1050(这是 NH 的先前版本,但我认为答案是相同的)

    2011 年 5 月 7 日更新

    似乎 Nhibernate JIRA 发生了一些奇怪的事情(即没有域名)。该链接目前可以在https://nhibernate.jira.com/browse/NH-1050 找到。然而,随着 NHibernate 3 的出现,我还没有检查这个问题是否仍然是一个问题。

    【讨论】:

    • 上面的链接(指向 Ayende 文章)似乎已损坏。
    【解决方案2】:

    您描述的情况非常符合 NHibernate 的意图和支持。

    【讨论】:

    • 我该怎么做 - 根据文档:“如果 关联的 列被声明为 NOT NULL,NHibernate 在创建或创建时可能会导致违反约束更新关联。为防止出现此问题,您必须使用双向关联,将多值端(集合或包)标记为 inverse="true"。"
    • 所以尝试在父子集合的映射中使用&lt;set inverse="true" /&gt;
    • 但我的要求之一是我不想要双向关联,因为它使模型更加混乱。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多