簡體   English   中英

EntityFramework自動創建多對多關系

[英]EntityFramework creating many-to-many relationships automatically

實體框架是否自動創建多對多關系?

我在下面嘗試:

public DbSet<User> Users { get; set; }
public DbSet<Sport> Sports { get; set; }
public DbSet<Team> Teams { get; set; }
  • 我有很多運動
  • 我有很多運動隊
  • 我的團隊中有很多用戶

類:

運動

public int ID { get; set; }
public List<Team> Teams { get; set; }

球隊

public int ID { get; set; }
public List<User> Members { get; set; }
public int SportID { get; set; }

用戶

 public int UserID { get; set; }

問題:

因此,它可以很好地創建表Users,Sports,Teams及其相互之間的外鍵關聯。 問題在於這些表沒有被規范化並且具有冗余數據。 另外,當嘗試在“團隊”表中查詢成員時,我總是得到一個空的成員列表!

例如,“用戶”有一個“團隊ID”列,因此添加到團隊中時會創建一個新的“用戶”記錄,這很糟糕!

實體框架是否不應該自動創建多對多關系表? 使其具有列| UserID | SportID | TeamID |

用戶有一個列Team_ID

這是問題所在。 EF在用戶表中創建了一個列,因為您告訴EF這樣做。 您應該使其多對多。

public class User
{
   public int UserId { set;get;}
   public ICollection<Team> Teams { set; get; }
}
public class Sport
{
    public int Id { set; get; }
    public string Name { set; get; }
    public IEnumerable<Team> Teams { set; get; }
}

public class Team
{
    public int TeamId { get; set; }
    public List<User> Users { get; set; }
    public int SportId { set; get; }
}

現在,使用流利的配置,您可以指示EF為多對多關系船創建連接表。 您可以在dbcontext類的OnModelCreating方法中執行此操作。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<User>()
                .HasMany(d => d.Teams)
                .WithMany(f => f.Users)
                .Map(w => w.ToTable("UserTeam")
                           .MapLeftKey("UserId")
                           .MapRightKey("TeamId"));

}

這將在User和Team之間建立多對多關系,並創建第四個表,其中包含UserId和TeamId列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM