1

给定两个表:

 ___________
|Table1     |
|-----------|
|Id         |
|___________|
 ___________
|Table2     |
|-----------|
|Id         |
|Table1_Id  |
|___________|

不必存在 Table2 记录的地方(即关系是One{Table1}-to-OneOrZero{Table2})。

我需要能够使用映射到 Table1 的父类从两个表中保存和检索数据。

实体如下:

public class Table1
{
   int Id {get; set;}
   Table2 Table2 {get; set;}
}
public class Table2
{
   int Id {get; set;}
}

...我创建了如下映射:

public class Table1Map
{
   this.Id(x => x.Id);
   HasOne(x => x.Table2).Cascade.All();
}

public class Table2Map
{
   this.Id(x => x.Id);
}

...这适用于读取但不写入数据,因为它尝试将 NULL 插入Table2.Table1_Id列而不是从Table1.Id属性中获取。

有没有办法让插入工作而不必创建双向引用,即没有Table1属性 on Table2 class

4

2 回答 2

0

我最近在 SO 中遇到了这个问题。就关系而言,正如@Hacked 已经提到的那样,它不能是 HasOne,因为它们不共享一个公共主键。考虑使用 HasMany (不太确定),单向关系的缺失部分是Not.KeyUpdate

public class Table1Map
{
   this.Id(x => x.Id);
   HasMany(x => x.Table2)
   .Not.KeyUpdate() <--here
   .Cascade.All();   
}

以下是参考链接

单向一对多关系的 NHibernate 配置

NHibernate 在插入后仍然会更新

于 2012-12-18T15:30:22.163 回答
-1

通常,您只需使用References而不是HasOne. 看,我认为您的意思是多对一,先生

文章总结:HasOne,或者说一对一的关系,专门针对两个表共享一个主键的关系。

于 2012-12-18T14:07:15.640 回答