0

我有 2 张桌子(Labour 和 LabourPosition)。我不想使用从 Labor 表到 LabourPosition 表的 fki,而是使用对象(theLabourer.LabourPosition.Name而不是getLabourPosition(theLabourer.LabourPositionId).

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

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

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

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

public virtual LabourPosition LabourPosition { get; set; }

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

4

2 回答 2

2

来自流利的映射文档

HasOne / 一对一

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

HasOne(x => x.Cover);

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

HasMany/一对多

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

公共类作者 { 公共 IList 书籍 { 获取;放; 我们使用 AuthorMap 构造函数中的 HasMany 方法来映射关系的这一侧:

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

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

为什么需要一对一的关系,而不是将所有列保存在一个表中?

于 2011-11-18T04:46:15.757 回答
0

在您的映射中尝试

References(x => x.LabourPosition, "LabourPositionsId");
于 2011-11-18T04:53:33.173 回答