【问题标题】:Entity Framework : Handle multiple relationships between two entities实体框架:处理两个实体之间的多重关系
【发布时间】:2015-12-07 12:15:01
【问题描述】:

有两个实体:

  1. 组
  2. Yuvak - 人物

“其他”人被设计在没有组的后端。 (空)

一个 Yuvak - 人总是有一个家庭组。 (1=>1) 并且没有可控制的组。

A Nirikshak(Head) - 人总是有一个家庭组。 (1=>1) 但他也将控制多个组 - GroupsOfNirikshak。 (1=>很多)

一个组会有多个 Yuvaks (1=>Many)

并且所有组大多都只有一个负责人。 (最初,一个新组可能没有任何负责人,但有零个或多个 yuvaks-persons。)

[Table("Group")]
public class Group
{
    [Key]
    public int Id { get; set; }
    .....       
    public virtual List<Yuvak> Yuvaks { get; set; }
    [ForeignKey("Nirikshak")]
    public int? NirikshakId { get; set; }
    public virtual Yuvak Nirikshak { get; set; }
}

[Table("Yuvak")]
public class Yuvak
{
    [Key]
    public int Id { get; set; }
    .....
    [ForeignKey("HomeGroup")]
    public int? HomeGroupId { get; set; }
    public virtual Group HomeGroup { get; set; }
    public virtual List<Group> GroupsOfNirikshak { get; set; }
}

我已经为两个实体中的 1=>1 关系(可为空)提供了两个外键。 现在要管理多对多关系,如果它们不为空,它应该自动创建带有“Yuvak_Id”和“Group_Id”列的第三个表。但是在这里,FK 是空的;它不是创建第三个表,而是在两个表中添加一个外键列。(Group:"Yuvak_Id" and Yuvak:"Group_Id")

我应该怎么做才能维护 Yuvak-HomeGroup 它应该只使用上面提供的外键,并且对于多对多关系(Head-GroupsOfNirikshak & Group-Yuvaks)它应该创建一个单独的表。

我可以为多对多关系创建一个单独的表,例如:(ID,YuvakID,GroupID) 我该怎么做?

我尝试这样做,但得到了不同的错误,如下所示:

  1. 在类型上声明的导航属性“HomeGroup” 'YTKGoshthiManagment.Models.Yuvak' 已配置为 外键冲突。
  2. 多重性在角色“Yuvak_HomeGroup_Target”中无效 关系“Yuvak_HomeGroup”。因为依赖角色 属性不是关键属性,的上限 依赖角色的多重性必须是“*”。

.....

等等。

【问题讨论】:

    标签: c# entity-framework orm entity-framework-6 entity


    【解决方案1】:

    使用“Fluent Api”!

    在你的上下文类中写(例如):

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
         modelBuilder.Entity<Group>()
                     .HasOptional(t => t.Nirikshak)
                     .WithMany(t => t.GroupsOfNirikshak)
                     .HasForeignKey(t => t.NirikshakId);
    }
    

    【讨论】:

      【解决方案2】:

      您可以删除类和属性上的注释。一旦你在另一个上有一个基于模型的类,实体框架会自动在它上面创建一个外键关系。它将把 Yuvak 作为 Group Graph 对象上的一个节点来处理。您无需声明注释,因为 EF 会自动为您执行此操作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-23
        • 1970-01-01
        • 2018-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多