Отношения «один ко многим» между принадлежащим объектом и совокупным корнем в Entity Framework CoreC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Отношения «один ко многим» между принадлежащим объектом и совокупным корнем в Entity Framework Core

Сообщение Anonymous »


Я создаю приложение для управления проектами и наткнулся на следующую проблему: У меня есть агрегат проекта, который содержит список участников проекта и их сессий. Каждый из участников ссылается на Учетную запись, используя внешний ключ.

Моя проблема в том, что мне нужно определить связь между учетной записью и проектом, поскольку проект не ссылается напрямую на учетную запись.

Субъект учетной записи (упрощенно):

Учетная запись общедоступного класса { общедоступный идентификатор Guid {get; набор; } общественная строка AccountName {get; набор; } общедоступный список проектов {get; набор; } } Это совокупные данные текущего проекта (упрощенно)

Проект общедоступного класса { общедоступный идентификатор Guid {get; набор; } общедоступная строка Title {get; набор; } публичный список участников {get; набор;} } Участник публичного класса { общедоступный идентификатор Guid {get; набор; } публичный аккаунт Аккаунт { get; набор; } public List Sessions {get; набор; } } Сессия публичного класса { DateTime Start {получить; набор; } DateTime End {получить; набор; } } Конфигурации следующие:

private void ConfigurationProjectsTable (строитель EntityTypeBuilder) { builder.ToTable("Проекты"); builder.HasKey(p => p.Id); } Private void ConfigurationParticipantsTable (строитель EntityTypeBuilder) { builder.OwnsMany(p => p.Participants, pb => { pb.ToTable("Участники"); pb.WithOwner().HasForeignKey("ProjectId"); pb.HasKey(nameof(Participant.Id), "ProjectId"); pb.HasOne(p => p.Account) .Со многими() .HasForeignKey("AccountId"); } } Я уже пытался извлечь класс участника в другой агрегат, но класс проекта должен гарантировать, что одна учетная запись не может быть в одном проекте несколько раз. Я также просмотрел несколько руководств, в том числе и это, где тоже возникает такая ситуация, так что это не кажется невозможным.

При моем текущем подходе (оставляя WithMany() пустым) таблица проектов получит внешний ключ к учетной записи, но это не то, что я хочу, поскольку в одном проекте может быть несколько участников. Я также пытался установить связь с конфигурацией учетной записи, но у меня возникла та же проблема с методом HasOne().

Еще одна идея заключалась в том, чтобы хранить список участников класса аккаунта следующим образом:

Учетная запись общедоступного класса { public List Участвует {get; набор; } } Тогда я мог бы получить доступ к классу проекта, используя Participant.Project, но это, похоже, не соответствует концепциям DDD, поскольку здесь я ссылаюсь на объект напрямую.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»