一对一映射与Fluent NHibernate不工作
本文关键字:工作 NHibernate Fluent 映射 一对一 | 更新日期: 2023-09-27 18:15:09
我有两个表(工党和工党位置)。我想使用对象(theLabourer.LabourPosition.Name
而不是getLabourPosition(theLabourer.LabourPositionId)
,而不是从Labour表到Labour position表。
我读了一些文章来做这个,但他们似乎不适合我…当我试图查看工党位置属性的值时,我得到的错误是"无法初始化代理-没有会话"。
我的映射(注:工党位置没有返回工党的fki,只有一种方式):LabourMap类:
References<LabourPosition>(x => x.LabourPosition, "LabourPositionsId");
显然,我已经将Labour实体中的属性定义为:
public virtual LabourPosition LabourPosition { get; set; }
任何想法?帮助将是感激的!
来自fluent映射文档
HasOne/一对一
HasOne通常用于特殊情况。通常,你会用a参考关系在大多数情况下(见:我认为你的意思是一个多对一的)。如果你真的想要一对一,那么你可以使用具方法。
HasOne(x => x. cover);
如果您想使用引用(如代码所示),则需要映射关系的双方。来自文档:
HasMany/一对多
HasMany可能是最常见的基于集合的关系你要用。HasMany是引用的"另一边"关系,并应用于"一方"(一个作者有很多)书)。现在,让我们来描绘我们开始的这段关系的作者一方以上。我们需要联接到返回集合的books表与该作者有关的所有书籍
public class Author {public IList Books {get;设置;}}使用AuthorMap构造函数中的HasMany方法来映射这一侧关系:
HasMany(x => x. books);与引用一样,外键默认为您可以使用KeyColumn方法覆盖它或进行更改使用约定的默认行为
可以使用几种不同类型的集合它们都在HasMany调用下可用。
为什么需要一对一的关系,而不是将所有列保存在一个表中?
在您的映射中尝试
References(x => x.LabourPosition, "LabourPositionsId");