【问题标题】:fluent nhibernate: Mapping a Many-to-many realationship as a one-to-many relationshipfluent nhibernate:将多对多关系映射为一对多关系
【发布时间】:2011-09-09 11:55:16
【问题描述】:

我们在数据库中建模了学生和教授之间的多对多关系(使用桥接表),但在我们的实体中,我们希望将其建模为一对多关系,即学生有一个教授。

这是我们的尝试,但它不起作用:

protected StudentMap()
        {
            Id(x => x.Id);
            Map(x => x.Name);

            Join("student_professor_selected", m =>
            {                                                  
                m.KeyColumn("student_professor_selected_key");
                m.References(x => x.Professor);
             });
        }

【问题讨论】:

    标签: fluent-nhibernate


    【解决方案1】:

    加入是完全不同的东西。它用于将类的一部分放入另一个表中(一对一)。

    您只需映射一个教授到学生的多对多关系,它在 C# 中始终是一个简单的列表。

    不可能将其映射为从学生到教授的单一结尾引用。但是您可以在私有属性中映射教授列表并实现仅返回第一个元素的教授属性:

    private IList<Professor> professors;
    
    public Professor Professor { get { return professors.First(); } }
    

    【讨论】:

    • 那么我们将如何映射呢?你不能这样做......`HasManyToMany(x=>x.Professors)` 因为该字段是私有的,我们不能使用公共属性,因为它不是一个列表。
    • 对不起,我不能说映射到底是什么样子,我没有使用 Fluent ... 它一定是某种 HasManyToMany。必须有某种方法来映射字段。
    • 看看这篇关于如何在 FNH stackoverflow.com/questions/781443/…987654321@中映射私人收藏的帖子
    【解决方案2】:

    感谢您的帮助,我的解决方案如下。在教授课程中,我添加了以下内容:

    private IList<Professor> _professors;
    public Professor Professor { get { return _professors.First(); } }
    

    然后为了映射这个我做了以下,其中professor_student_selected 是将教授键映射到学生键的桥表

    HasManyToMany<Students>(Reveal.Member<Professor>("_professors")).Table("professor_student_selected").ChildKeyColumn("student_key").ParentKeyColumn("professor_key");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-12
      • 1970-01-01
      • 1970-01-01
      • 2011-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多