Bidi关联和NHibernate映射

我有BidiParent和BidiChildList类,它们以双向父子关系链接父母和孩子。 如果通过例如服务层更新孩子的父母,则新旧父母的孩子列表会自动更新以反映更改。 同样,如果通过例如添加新孩子来更新父母的子女列表,则子女的父母将自动更改为旧父母的子女列表。 我想尝试建立一个“智能”域模型。

显然,第一个问题是:这是一个好主意吗?

第二个问题是:是否有可能告诉NHibernate访问和修改字段 _Children或_Parent,但是要考虑属性 Children或Parent是否与字段完全同义? NHibernate应该加载并保存内部字段,但HQL或LINQ查询应该使用公共属性?

public class BidiParent { ... } public class BidiChildList : IList { ... } public class Parent { public string Name { get; set; } public IList Children { get { return ChildrenBidi; } set { ChildrenBidi.Set(value); } } private BidiChildList ChildrenBidi { get { return BidiChildList.Create(this, p => p._Children, c => c._Parent, (c, p) => c._Parent = p); } } internal IList _Children = new List(); } public class Child { public string Name { get; set; } public Parent Parent { get { return ParentBidi.Get(); } set { ParentBidi.Set(value); } } private BidiParent ParentBidi { get { return BidiParent.Create(this, p => p._Children, () => _Parent, p => _Parent = p); } } internal Parent _Parent = null; } [Test] public void MultilevelConstruction_Succeeds() { var p = new Parent { Name = "Bob", Children = new List { new Child { Name = "Kate" }, new Child { Name = "Billy" } } }; Assert.AreEqual(2, p.Children.Count); Assert.AreEqual("Kate", p.Children[0].Name); Assert.AreEqual("Billy", p.Children[1].Name); Assert.AreSame(p, p.Children[0].Parent); Assert.AreSame(p, p.Children[1].Parent); } 

回答我自己的问题:我需要使用命名策略,详见文档 。 RTFM对吗?