Csharp/C#教程:EF Core – 课堂上的多对多关系分享


EF Core – 课堂上的多对多关系

用户友情关系

我找到了答案

entity framework核心:与同一实体的多对多关系,并尝试这样做。

实体来说:

public class User { public int UserId { get; set; } public virtual ICollection 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; } } 

流畅的API:

 modelBuilder.Entity() .HasKey(f => new { f.MainUserId, f.FriendUserId }); modelBuilder.Entity() .HasOne(f => f.ManUser) .WithMany(mu => mu.Friends) .HasForeignKey(f => f.MainUserId); modelBuilder.Entity() .HasOne(f => f.FriendUser) .WithMany(mu => mu.Friends) .HasForeignKey(f => f.FriendUserId); 

当我添加迁移时,错误消息是

无法在’User.Friends’和’Friend.FriendUser’之间建立关系,因为’User.Friends’和’Friend.ManUser’之间已经存在关系。 导航属性只能参与单个关系。

我该怎么办? 或者我应该创建一个Entity FriendEntity:User?

问题是你不能有一个集合来支持一对多的关联。 Friend有两个外键,它们都需要在它们引用的实体中使用反向结尾 。 所以添加另一个集合作为MainUser反向结束:

 public class User { public int UserId { get; set; } public virtual ICollection MainUserFriends { get; set; } public virtual ICollection Friends { get; set; } } 

和映射:

 modelBuilder.Entity() .HasKey(f => new { f.MainUserId, f.FriendUserId }); modelBuilder.Entity() .HasOne(f => f.MainUser) .WithMany(mu => mu.MainUserFriends) .HasForeignKey(f => f.MainUserId).OnDelete(DeleteBehavior.Restrict); modelBuilder.Entity() .HasOne(f => f.FriendUser) .WithMany(mu => mu.Friends) .HasForeignKey(f => f.FriendUserId); 

一个(或两个)关系应该没有级联删除以防止多个级联路径。

第二个系列不是强制性的。 你只需要像这样将de .WithMany()留空:

 modelBuilder.Entity() .HasOne(f => f.MainUser) .WithMany() .HasForeignKey(f => f.MainUserId); modelBuilder.Entity() .HasOne(f => f.FriendUser) .WithMany() .HasForeignKey(f => f.FriendUserId); 

看看这个: https : //github.com/aspnet/EntityFramework/issues/6052

上述就是C#学习教程:EF Core – 课堂上的多对多关系分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/992567.html

(0)
上一篇 2021年12月24日
下一篇 2021年12月24日

精彩推荐