Entity Framework Core 3, Проектирование доменов с полями поддержки и многими отношениями - PullRequest
0 голосов
/ 18 апреля 2020

Я пытаюсь создать отношения «многие ко многим» между сущностями пользователя и роли. Вот часть класса 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 правильно. Любые советы будут высоко оценены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...