尝试保存实体时出现客户端错误。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
)
RISEBY
相关分类