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