Я получаю ошибку на стороне клиента при попытке сохранить объект. 2 таблицы имеют отношение «один ко многим» и «один к нулю» одновременно, и это вызывает следующую ошибку:
Невозможно определить отношение, представленное свойством навигации 'Group.LockedByUser' типа 'Пользователь'. Либо настройте отношение вручную, либо игнорируйте это свойство с помощью атрибута [NotMapped] или с помощью EntityTypeBuilder.Ignore в OnModelCreating
Это мои текущие контексты:
Субъект пользователя
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
)