Entity Framework是否会自动创建多个关系,如果是,如何创建?
我正在尝试以下内容:
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与他们的外键关联彼此。问题是这些表没有规范化并且具有冗余数据。此外,当尝试查询Teams表中的成员时,我总是得到一个空的成员列表!
例如,用户有一个Team_ID列,因此当它添加到一个糟糕的团队时会创建一个新的用户记录!
不是实体框架会自动创建多对多关系表吗?所以它有列| UserID | SportID | TeamID |
答案 0 :(得分:0)
用户有一个Team_ID列
这是问题所在。 EF在User表中创建了一个列,因为您告诉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列的表。