[英]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.