Entity Framework : 处理两个实体之间的多重关系

Entity Framework : Handle multiple relationships between two entities

有两个实体:

  1. Yuvak - 人物

"Other"人是后台设计的,没有群。 (空)

一个 Yuvak - 一个人将始终拥有一个家庭组。 (1=>1) 并且没有要控制的组。

A Nirikshak(负责人)- 一个人将始终拥有一个家庭组。 (1=>1) 但他也将有多个组来控制 - GroupsOfNirikshak。 (1=>许多)

一个小组将有多个 Yuvaks(1=>许多)

而且所有的小组大多只有一个负责人。 (最初一个新组可能没有任何头,只有零个或多个 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 关系(可为空)提供了两个外键。 现在要管理多对多关系,它应该自动创建第三个 table 和 "Yuvak_Id" 和 "Group_Id" 列(如果它们不为空)。但是这里的 FK 是空的;它没有创建第三个 table,而是在 table 中添加了一个外键列。(组:"Yuvak_Id" 和 Yuvak:"Group_Id")

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

我可以为多对多关系创建单独的 table 吗:(ID,YuvakID,GroupID) 我该怎么做?

我尝试这样做,但出现了如下不同的错误:

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

.....

等等。

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

使用 "Fluent Api" !

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

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