c# - EFCore:无法确定导航属性表示的关系
问题描述
我尝试设置一个 UserUserFavourite 类。如果用户关注用户或被用户关注,它将存储用户之间的关系。
为此,我创建了一个类,如下所示:
[Table("UserUserFavorite")]
public class UserUserFavorite
{
[ForeignKey("User1")]
public long UserId1 { get; set; }
public User User1 { get; set; }
[ForeignKey("User2")]
public long UserId2 { get; set; }
public User User2 { get; set; }
}
user1 正在关注 user2。
在我的 UserClass 中,我有两个属性:
`public List<UserUserFavorite> Followers{ get; set; }
public List<UserUserFavorite> Followings{ get; set; }`
在我的 dbcontext 中,我有:
modelBuilder.Entity<UserUserFavorite>().HasKey(sc => new { sc.UserId1, sc.UserId2 });
然后我生成我的迁移我有错误:
无法确定“用户”类型的导航属性“UserUserFavorite.User1”表示的关系。手动配置关系,或使用“[NotMapped]”属性或使用“OnModelCreating”中的“EntityTypeBuilder.Ignore”忽略此属性。
怎么了?
解决方案
您需要设置DeleteBehavior.Restrict
在OnModelCreating
.
这里和你的需求是一样的,可以参考这个。
我根据您的代码创建了一个演示:
public class UserUserFavorite
{
public long UserId1 { get; set; }
public User User1 { get; set; }
public long UserId2 { get; set; }
public User User2 { get; set; }
}
public class User
{
public long Id { get; set; }
public string Name { get; set; }
public UserUserFavorite userUserFavorite1 { get; set; }
public UserUserFavorite userUserFavorite2 { get; set; }
}
OnModelCreating:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<UserUserFavorite>().HasKey(sc => new { sc.UserId1, sc.UserId2 });
modelBuilder.Entity<UserUserFavorite>()
.HasOne(m => m.User1)
.WithOne(t => t.userUserFavorite1)
.HasForeignKey<UserUserFavorite>(m => m.UserId1)
.OnDelete(DeleteBehavior.Restrict);
modelBuilder.Entity<UserUserFavorite>()
.HasOne(m => m.User2)
.WithOne(t => t.userUserFavorite2)
.HasForeignKey<UserUserFavorite>(m => m.UserId2)
.OnDelete(DeleteBehavior.Restrict);
}
推荐阅读
- reactjs - 如何在另一个组件中使用组件的 React.useRef()?
- javascript - HTML,如何在视口中获取准确的文本(不仅仅是与 clientRect 重叠的 p 标签)?
- angular - 登录后重新加载项目
- javascript - 上传图片后输入文字消失
- r - 在带有两个图形的“布局”中分别添加一个轴
- python - DOCKER 不运行 manage.py
- graphql - Gatsby & markdown - 获取和写入任务列表
- javascript - 在表单提交时匿名表单输入
- python - 通过以一定间隔选择行来绘制数据框中的列
- linux - 带有 Go 的 macOS 通知