![](/img/trans.png)
[英]One-to-one Mapping issue with NHibernate/Fluent: Foreign Key not updateing
[英]Is it one-to-one or Component ? Nhibernate Mapping
假设我有 Person 和 Address 类,并且它们在 DB 中有不同的表。
一个人可以有一个地址类。 这对我来说是重要的部分。 一个人只能有一个地址作为它的子元素,我想将它们保存在数据库的不同表中。
通常我知道我需要将它们放在同一张桌子上,但我的场景需要这个。
(而且它看起来像一对多,但我不想只为一个对象创建一个集合)
Person Address
------- -------
id id
Name PersonId
StreetName
和班级代码
Person
--------
public virtual long Id{get;set;}
public virtual Address MyAddress {get;set;}
如您所见,当我得到任何 Person 时,我想亲自获得 Address 属性? 但是它们在不同的表中。 如何进行这种映射?
提前致谢
您不能使用组件映射地址,因为它有自己的表。 如果所有字段都在一张表中,则可以使用它。 从休眠参考:
组件元素将子对象的属性映射到父类的表的列。
您应该使用一对一关系来映射场景中的表和类。
要在数据库中强制执行一对一,您还可以对 Address 表中的 PersonId 设置唯一约束。
你确定是一对一的关系? 我认为这是一种多对一的关系,因为通常一个人可以住在某个地址。
无论如何,如果是多对一的关系,我会像这样映射它们。 在你的情况下,我会做的是从地址表中删除 PersonId FK 并从人员表中引用地址表,这样你就会有这样的东西。
Person Address
------ -------
id id
Name StreetName
AddressId
<many-to-one name="MyAddress" class="Address" column="AddressId"/>
如果您确实坚持一对一的关系,我建议将两个表合并在一起。
我在 Person 映射中使用了下面的代码来完成它。
<one-to-one lazy="proxy" name="MyAddress" class="Address" property-ref="PersonId" cascade="delete" />
希望能帮助别人
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.