无法确定导航属性表示的关系

尝试保存实体时出现客户端错误。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


精慕HU
浏览 241回答 2
2回答

RISEBY

正如所解释的这个答案,我需要复制的共享关系。当使用DbContext2之间的关系User并Group没有定义。我可以通过使用单个上下文或让上下文继承定义所有共享关系的主上下文来解决我的问题。
打开App,查看更多内容
随时随地看视频慕课网APP