尝试保存实体时出现客户端错误。2个表同时具有一对多和一对零关系,这会导致以下错误:无法确定由“用户”类型的导航属性“ Group.LockedByUser”表示的关系。手动配置关系,或者使用“ [NotMapped]”属性或“ OnModelCreating”中的“ EntityTypeBuilder.Ignore”忽略此属性这些是我目前的情况:用户实体public class User{ [Key] public int UserId { get; set; } public string Username { get; set; } public int GroupId { get; set; } public Group GroupThisUserBelongsTo { get; set; } public ICollection<Group> GroupsLockedByThisUser { get; set; } public ICollection<Config> Configs { get; set; }}集团实体public class Group{ [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int GroupId { get; set; } public string GroupName { get; set; } public int? LockedByUserId { get; set; } public User LockedByUser { get; set; } public ICollection<User> Users { get; set; }}DbContext1提取modelBuilder.Entity<Group>(entity => { entity.HasOne(d => d.LockedByUser) .WithMany(p => p.GroupsLockedByThisUser) .HasForeignKey(d => d.LockedByUserId); }modelBuilder.Entity<User>(entity => { entity.HasOne(d => d.GroupThisUserBelongsTo) .WithMany(p => p.Users) .HasForeignKey(d => d.GroupId) .OnDelete(DeleteBehavior.ClientSetNull); });配置实体public class Config{ [Key] public int ConfigId { get; set; } public int UserId { get; set; } public string Config { get; set; } public User User { get; set; }}dbContext2提取 modelBuilder.Entity<Config>(entity => { entity.HasOne(d => d.User) .WithMany(p => p.Configs) .HasForeignKey(d => d.UserId); });产生错误的代码如下:var config = new Config { UserId = 123456, Config = "test" }; _dbContext2.Config.Add(config); _dbContext2.SaveChanges();我真的不明白为什么在尝试保存该实体时会出现客户端错误。错误甚至与我要保存的上下文无关。我的外键设置正确吗?Group有很多User-User有一个Group(FK GroupId)User锁定零个或多个Group(FK LockedByUserId)Config有一个User(FK UserId)
2 回答
RISEBY
TA贡献1856条经验 获得超5个赞
正如所解释的这个答案,我需要复制的共享关系。
当使用DbContext2
之间的关系User
并Group
没有定义。
我可以通过使用单个上下文或让上下文继承定义所有共享关系的主上下文来解决我的问题。
- 2 回答
- 0 关注
- 240 浏览
添加回答
举报
0/150
提交
取消