Отношения «один ко многим» между принадлежащим объектом и совокупным корнем в Entity Framework Core ⇐ C#
Отношения «один ко многим» между принадлежащим объектом и совокупным корнем в Entity Framework Core
Я создаю приложение для управления проектами и наткнулся на следующую проблему: У меня есть агрегат проекта, который содержит список участников проекта и их сессий. Каждый из участников ссылается на Учетную запись, используя внешний ключ.
Моя проблема в том, что мне нужно определить связь между учетной записью и проектом, поскольку проект не ссылается напрямую на учетную запись.
Субъект учетной записи (упрощенно):
Учетная запись общедоступного класса { общедоступный идентификатор 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, поскольку здесь я ссылаюсь на объект напрямую.
Я создаю приложение для управления проектами и наткнулся на следующую проблему: У меня есть агрегат проекта, который содержит список участников проекта и их сессий. Каждый из участников ссылается на Учетную запись, используя внешний ключ.
Моя проблема в том, что мне нужно определить связь между учетной записью и проектом, поскольку проект не ссылается напрямую на учетную запись.
Субъект учетной записи (упрощенно):
Учетная запись общедоступного класса { общедоступный идентификатор 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, поскольку здесь я ссылаюсь на объект напрямую.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Отношения «один-к-одному» и «один-ко-многим» в Entity Framework 5 Code First
Anonymous » » в форуме C# - 0 Ответы
- 24 Просмотры
-
Последнее сообщение Anonymous
-
-
-
C# Entity Framework Core - отношение «один ко многим» не отображает данные «Один»
Anonymous » » в форуме C# - 0 Ответы
- 9 Просмотры
-
Последнее сообщение Anonymous
-
-
-
C# Entity Framework Core - отношение «один ко многим» не отображает данные «Один»
Anonymous » » в форуме C# - 0 Ответы
- 17 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Entity Framework Core «один к нулю или один», не привязывая включенные отношения при запросе
Anonymous » » в форуме C# - 0 Ответы
- 31 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Entity Framework Core «один к нулю или один», не привязывая включенные отношения при запросе
Anonymous » » в форуме C# - 0 Ответы
- 29 Просмотры
-
Последнее сообщение Anonymous
-