这就是我想要达到的目标:
modelBuilder.Entity<ApplicationUser>()
.HasMany(u => u.Following)
.WithMany(u => u.Followers)
.Map(m =>
{
m.ToTable("FollowTables");
m.MapLeftKey("UserId");
m.MapRightKey("FollowId");
});在应用程序用户类中,我配置了如下所示的追随者:
public ICollection<ApplicationUser> Following { get; set; }
public ICollection<ApplicationUser> Followers { get; set; }下面的表格应该是这样的:
public class FollowTable
{
[Key]
public int autoId { get; set; }
public int UserId { get; set; }
public int? FollowId { get; set; }
}autoId是主键,UserId和FollowId都是ApplicationUser类的外键,其中UserId是用户自己的id,FollowId是用户为following.Its数据的id:
autoId UserId FollowId
1 4 11
2 4 12
3 4 13现在,我的问题是当我通过pmc更新数据库时,它正在创建两个数据库表,一个是带有列的FollowTables (USerId,FollowId),另一个是FollowTables1(autoId,USerId,FollowId)。
如果我从applicationDbContext类中删除这一行:
public DbSet<FollowTable> FollowTables { get; set; }然后,它只创建一个表,但没有主键。
谁来帮帮我。如何正确地将UserId和followId配置为外键,这两个应该映射到ApplicationUser的Id。我想使用那些集合的追随者和追随者too.how来做它。
发布于 2016-01-06 13:37:22
您必须决定是否要使用表示连接表的实体。如果不需要向该表添加任何其他属性(不包括FKs ),那么我建议您不要将连接表映射为实体。由于实体框架将为您处理该表,这将使您更加容易。
现在,如果您确实需要映射该表,那么您需要删除多到多个fluent api配置,并更改导航属性的类型:
public ICollection<FollowTable> Following { get; set; }
public ICollection<FollowTable> Followers { get; set; } 这将与连接表创建两个一对多的关系,一个多到多关系的显式表示。要做到这一点,还需要在该实体中进行一些更改:
public class FollowTable
{
[Key]
public int autoId { get; set; }
public int UserId { get; set; }
[ForeignKey("User")]
public ApplicationUser User{ get; set; }
[ForeignKey("Follow")]
public int? FollowId { get; set; }
public ApplicationUser Follow{ get; set; }
}另外,我不认为FollowId Fk属性应该是可空的FK,因为您希望表示两个人之间的关系。
如果你问我关于你应该采取什么选择的意见,我建议你不要映射连接表,如果你只有这些属性的话。
https://stackoverflow.com/questions/34634090
复制相似问题