与Fluent NHibernate一对一或零关系

时间:2012-12-18 14:03:10

标签: c# nhibernate fluent-nhibernate nhibernate-mapping fluent-nhibernate-mapping

给出两个表:

 ___________
|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上没有Table2 class属性?

2 个答案:

答案 0 :(得分: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 configuration for uni-directional one-to-many relation

NHibernate still issues update after insert

答案 1 :(得分:-1)

通常情况下,您只使用References而不是HasOne。请参阅I think you mean a many-to-one, sir

文章摘要:HasOne或一对一关系专门针对两个表共享主键的关系。