2014-12-06 42 views
0

考虑名为List的实体可以容纳多个用户的场景。在Code First中指定关联表

public class List{ 
    public int Id{get;set;} 

    public string Name{get;set;} 

    public virtual List<User>Users{get;set; 

} 

public class User{ 
    public int Id{get;set;} 

    public string Name{get;set;} 

    public virtual List<List>List{get;set; 

} 

我在我的数据库中有一个名为ListUserAssociation的关联表,它包含多个记录。

表中有2列ListId和用户ID

如何指定该协会在EF代码第一次?

P.S。我不能删除并重新创建表格。

+0

你可以提供更多关于你想要做什么的信息吗?当你做user.List或者list.Users时,EF将使用查找表来完成这个数据获取 - 它不需要被指定为你的代码优先模型的一部分,因为从关系到面向对象的EF映射 – Carl 2014-12-06 08:56:36

回答

0

既然你有两边定义的集合,你可以定义从两边的关系:

modelBuilder.Entity<List>().HasMany(e => e.Users).WithMany(e => e.List).Map(ca => ca.MapLeftKey(new string[] {"ListId"}).MapRightKey(new string[] {"UserId"}).ToTable("ListUserAssociation"); 
modelBuilder.Entity<User>().HasMany(e => e.List).WithMany(e => e.Users).Map(ca => ca.MapLeftKey(new string[] {"UserId"}).MapRightKey(new string[] {"ListId"}).ToTable("ListUserAssociation"); 

我相信,你只需要一条线或其他以定义关系。即使它是多余的,我更喜欢包含两行,以便我看到从任一实体定义的关系(我将所有映射代码放置在每个实体的单独类中)。