给出两个表:
___________
|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
属性?
答案 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
答案 1 :(得分:-1)
通常情况下,您只使用References
而不是HasOne
。请参阅I think you mean a many-to-one, sir。
文章摘要:HasOne
或一对一关系专门针对两个表共享主键的关系。