繁体   English   中英

实体框架:处理两个实体之间的多个关系

[英]Entity Framework : Handle multiple relationships between two entities

有两个实体:

  1. Yuvak-人

“其他”人是在没有团队的后端设计的。 (空值)

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

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

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

并且所有组通常只有一个Head。 (最初,一个新的组可能没有任何头,但是零个或更多的yuvaks人。)

[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关系(可为空)提供了两个外键。 现在要管理多对多关系,如果它们不为null,则应自动创建带有“ Yuvak_Id”和“ Group_Id”列的第三个表。 但是这里的FK为空; 而不是创建第三个表,而是在两个表中都添加了一个外键列。(组:“ Yuvak_Id”和Yuvak:“ Group_Id”)

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

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

我试图这样做,但是遇到了如下不同的错误:

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

.....

等等。

使用“ Fluent Api”!

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

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

您可以删除类和属性上的注释。 一旦在另一个上具有基于模型的类,则Entity Framework将自动在其上创建外键关系。 它将把Yuvak处理为Group Graph对象上的一个节点。 您无需声明注释,因为EF会自动为您这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM