Я пытаюсь создать отношения «многие ко многим» между сущностями пользователя и роли. Вот часть класса User:
private List<UserRoleLink> _userRoleLinks;
public IReadOnlyCollection<UserRoleLink> UserRoleLinks => _userRoleLinks?.AsReadOnly();
Я могу настроить сущность следующим образом:
public void Configure(EntityTypeBuilder<User> builder)
{
builder.ToTable("Users");
builder.HasKey(x => x.Id);
builder.HasMany(x => x.UserRoleLinks).WithOne(x => x.User);
builder.Metadata.FindNavigation(nameof(User.UserRoleLinks)).SetPropertyAccessMode(PropertyAccessMode.Field);
}
public void Configure(EntityTypeBuilder<UserRoleLink> builder)
{
builder.ToTable("LinkUserRole");
builder.HasKey(x => new { x.UserId, x.RoleId });
builder.HasOne(x => x.User).WithMany(x => x.UserRoleLinks).HasForeignKey(x => x.UserId);
builder.HasOne(x => x.Role).WithMany(x => x.UserRoleLinks).HasForeignKey(x => x.RoleId);
}
И это прекрасно работает. Но, глядя на свойство UserRoleLinks пользователя - это не то, что я действительно хочу с точки зрения домена. Связывание тесно связано с реляционными базами данных и не должно влиять на домен. В идеальном мире у меня было бы
public List<Role> Roles => _userRoleLinks?.Select(x => x.Role).ToList().AsReadOnly();
Но тогда я не мог бы сделать отображение EF правильно. Любые советы будут высоко оценены.