我找到答案
Entity Framework Core: many-to-many relationship with same entity 并尝试这样。
实体来说:
Finish
流畅的API:
public class User
{
public int UserId { get; set; }
public virtual ICollection<Friend> Friends { get; set; }
}
public class Friend
{
public int MainUserId { get; set; }
public User ManUser { get; set; }
public int FriendUserId { get; set; }
public User FriendUser { get; set; }
}
无法在'User.Friends'和'Friend.FriendUser'之间建立关系,因为'User.Friends'和'Friend.ManUser'之间已经存在关系。 导航属性只能参与一个关系。
我该怎么办?或者我应该创建一个Entity FriendEntity:User?
答案 0 :(得分:6)
问题是您不能拥有一个集合来支持一对多关联。 Friend
有两个外键,它们在所引用的实体中都需要反向结束。因此,将另一个集合添加为MainUser
的反向结尾:
public class User
{
public int UserId { get; set; }
public virtual ICollection<Friend> MainUserFriends { get; set; }
public virtual ICollection<Friend> Friends { get; set; }
}
映射:
modelBuilder.Entity<Friend>()
.HasKey(f => new { f.MainUserId, f.FriendUserId });
modelBuilder.Entity<Friend>()
.HasOne(f => f.MainUser)
.WithMany(mu => mu.MainUserFriends)
.HasForeignKey(f => f.MainUserId).OnDelete(DeleteBehavior.Restrict);
modelBuilder.Entity<Friend>()
.HasOne(f => f.FriendUser)
.WithMany(mu => mu.Friends)
.HasForeignKey(f => f.FriendUserId);
一个(或两个)关系应该没有级联删除以防止多个级联路径。
答案 1 :(得分:5)
第二个系列不是强制性的。你只需要将de .WithMany()留空如下:
modelBuilder.Entity<Friend>()
.HasOne(f => f.MainUser)
.WithMany()
.HasForeignKey(f => f.MainUserId);
modelBuilder.Entity<Friend>()
.HasOne(f => f.FriendUser)
.WithMany()
.HasForeignKey(f => f.FriendUserId);