【问题标题】:One-to-one mapping with Fluent NHibernate not workingFluent NHibernate 的一对一映射不起作用
【发布时间】:2011-12-31 22:39:27
【问题描述】:

我有 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; }

有什么想法吗?帮助将不胜感激!

【问题讨论】:

    标签: c# nhibernate fluent mappings


    【解决方案1】:

    来自fluent mapping 文档

    HasOne / 一对一

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

    HasOne(x => x.Cover);

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

    HasMany / 一对多

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

    public class Author { public IList Books { get;放; } } 我们 使用 AuthorMap 构造函数中的 HasMany 方法来映射这一侧 关系:

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

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

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

    【讨论】:

      【解决方案2】:

      在你的映射中尝试

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

      【讨论】:

        猜你喜欢
        • 2010-12-07
        • 1970-01-01
        • 2011-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-04
        相关资源
        最近更新 更多