繁体   English   中英

使用Fluent NHibernate进行一对一映射无法正常工作

[英]One-to-one mapping with Fluent NHibernate not working

我有2个表(Labor和LabourPosition)。 我想使用一个对象(theLabourer.LabourPosition.Name而不是getLabourPosition(theLabourer.LabourPositionId)而不是从Labor表中获取到LabourPosition表的getLabourPosition(theLabourer.LabourPositionId)

我已经阅读了一些文章来做到这一点,但它们似乎并不适合我......我在尝试查看LabourPosition属性的值时得到的错误是“无法初始化代理 - 没有会话”。

我的映射(ps:LabourPosition没有fki回到Labor,只有一种方式):LabourMap类:

References<LabourPosition>(x => x.LabourPosition, "LabourPositionsId");

然后显然我已经将Labor实体中的属性定义为:

public virtual LabourPosition LabourPosition { get; set; }

有任何想法吗? 帮助将不胜感激!

流畅的映射文档

HasOne /一对一

HasOne通常用于特殊情况。 通常,在大多数情况下你会使用References关系(参见:我认为你的意思是多对一)。 如果你真的想要一对一,那么你可以使用HasOne方法。

HasOne(x => x.Cover);

如果您想使用引用(如代码所示),则需要映射关系的两侧。 从文档:

HasMany /一对多

HasMany可能是您将要使用的最常见的基于集合的关系。 HasMany是References关系的“另一面”,并且被应用于“一面”(一位作者有很多书)。 现在让我们来看看我们上面开始的关系的作者方面。 我们需要加入书籍表,返回与该作者相关的任何书籍的集合。

公共课作者{public IList Books {get; 组; 我们使用AuthorMap构造函数中的HasMany方法来映射关系的这一面:

HasMany(x => x.Books); 与引用一样,外键默认为Author_id,您可以使用KeyColumn方法覆盖它,或使用约定更改默认行为。

您可以使用几种不同类型的集合,并且它们都可以在HasMany调用下使用。

为什么你需要一对一的关系,而不是只保留一个表中的所有列?

在你的映射中试试

References(x => x.LabourPosition, "LabourPositionsId");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM