NHibernate 映射 class 具有相同类型的属性
NHibernate mapping class with attribute of same type
我是 .NET MVC 的新手。但是,我遇到的这个 "problem" 看起来很常见,我找不到任何说明如何正确执行此操作的教程或 Whosebug 线程。
我有一个 class, 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。但是在调试模式下我可以看到,RightChild 被设置为 MyClass with Id=1(就像 MyClass 实例将自己设置为此属性)并且与 LeftChild 相同。
映射MyClass.hbm.xml
...
<one-to-one name="LeftChild" class="MyClass"/>
<one-to-one name="RightChild" class="MyClass"/>
...
一对一的方法是正确的还是我应该使用其他方法?
我们的 table 包含外键的引用几乎总是最好映射到 many-to-one
。
简单地将其视为对其他实例的标准引用 (Country, Currency)...类型。
<many-to-one name="LeftChild" column="LeftChild_ID" class="MyClass"/>
<many-to-one name="RightChild" column="RightChild_ID" class="MyClass"/>
我看到的唯一挑战是确保服务器部分(C# 代码、应用程序)正确设置这些值。这种持久化信息中没有bi-directional映射。每个兄弟姐妹,都需要自己的信息,谁是右谁是左。
我的意思是,与类似的映射进行比较:parent-child(也是相同类型)。在那种情况下,我们将有 child 引用 parent,并且 parent 有 children 的集合。
但这里不一样..再次..我们只映射关系的一侧。
A one-to-one
在这里不是 suitable,因为它需要两个 table,具有(几乎)相同的行数,共享相同的列作为键。 . 我喜欢使用它,但对于某种 附加 信息...请参阅:
- NHibernate Dynamic Columns Number
- NHibernate Optional Join generates insert instead of update
我是 .NET MVC 的新手。但是,我遇到的这个 "problem" 看起来很常见,我找不到任何说明如何正确执行此操作的教程或 Whosebug 线程。
我有一个 class, 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。但是在调试模式下我可以看到,RightChild 被设置为 MyClass with Id=1(就像 MyClass 实例将自己设置为此属性)并且与 LeftChild 相同。
映射MyClass.hbm.xml
...
<one-to-one name="LeftChild" class="MyClass"/>
<one-to-one name="RightChild" class="MyClass"/>
...
一对一的方法是正确的还是我应该使用其他方法?
我们的 table 包含外键的引用几乎总是最好映射到 many-to-one
。
简单地将其视为对其他实例的标准引用 (Country, Currency)...类型。
<many-to-one name="LeftChild" column="LeftChild_ID" class="MyClass"/>
<many-to-one name="RightChild" column="RightChild_ID" class="MyClass"/>
我看到的唯一挑战是确保服务器部分(C# 代码、应用程序)正确设置这些值。这种持久化信息中没有bi-directional映射。每个兄弟姐妹,都需要自己的信息,谁是右谁是左。
我的意思是,与类似的映射进行比较:parent-child(也是相同类型)。在那种情况下,我们将有 child 引用 parent,并且 parent 有 children 的集合。
但这里不一样..再次..我们只映射关系的一侧。
A one-to-one
在这里不是 suitable,因为它需要两个 table,具有(几乎)相同的行数,共享相同的列作为键。 . 我喜欢使用它,但对于某种 附加 信息...请参阅:
- NHibernate Dynamic Columns Number
- NHibernate Optional Join generates insert instead of update