我是.NET MVC的新手。然而,这个"问题"我看起来很常见,我找不到任何教程或stackoverflow线程,解释如何正确地做到这一点。
我有一个类,MyClass有两个相同类型的属性
public class MyClass : IEquatable<MyClass>
{
public virtual MyClass LeftChild { get; set; }
public virtual MyClass RightChild { get; set; }
...
}
现在我遇到了nhibernate映射的问题。起初我尝试了一对一的映射。我创建了新实例并且没有设置Childs,持久化它(假设Id = 1),并将此实例传递给View,我预计RightChild将为NULL,LeftChild将为NULL。但是在debbug模式中,我可以看到,RightChild设置为MyClass,Id = 1(类似于MyClass实例将自己设置为此属性),与LeftChild相同。
映射MyClass.hbm.xml
...
<one-to-one name="LeftChild" class="MyClass"/>
<one-to-one name="RightChild" class="MyClass"/>
...
一对一的做法是正确的做法还是我应该使用别的东西?
答案 0 :(得分:1)
我们的表包含外键的引用几乎总是最好用many-to-one
映射。
只需将其视为对其他实例(国家,货币)的标准引用...这是偶然的相同类型。
<many-to-one name="LeftChild" column="LeftChild_ID" class="MyClass"/>
<many-to-one name="RightChild" column="RightChild_ID" class="MyClass"/>
我看到的唯一挑战是确保服务器部分(C#代码,应用程序)正确设置这些值。这种持久化信息中没有双向映射。每个兄弟都需要自己的信息,谁是谁的权利。
我的意思是,与相似的映射比较:父子(也是相同的类型)。在这种情况下,我们将有孩子参考父母,父母有孩子的集合。
但是这里的情况不一样了......我们只是映射关系的一面。
one-to-one
在这里不合适,因为它需要两个表,(几乎)相同的行数,共享相同的列...我喜欢使用它,但是对于< strong>附加信息...请参阅: