Как мне сопоставить один Id в моей доменной модели с несколькими Id в моей модели данных с помощью AutoMapper? - PullRequest
0 голосов
/ 01 мая 2020

Я пытаюсь создать новый веб-API, используя ASP. Net Core 3, Entity Framework Core и AutoMapper для ранее существующей базы данных. Я постараюсь кратко объяснить мою проблему.

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

Person
--------------------
person_id    int PK
first_name   varchar
last_name    varchar
...other fields common to all Persons...

Owner
--------------------
owner_id     int PK, FK Person.person_id
...fields specific to Owners...

Renter
--------------------
renter_id   int PK, FK Person.person_id
...fields specific to Renters...

Примечание. Первоначальные разработчики базы данных не сделали person_id столбец идентификации. Они используют таблицу [UniqueIds] и хранимую процедуру для извлечения и приращения идентификаторов для таблиц в базе данных.

В контексте объектов модели данных, Person, Owner и Renter - это отдельные классы с включенным Свойства DbSet <> в DbContext. Owner_id или renter_id - это person_id, который связывает таблицы с помощью ограничения внешнего ключа.

С точки зрения объекта Domain я разработал классы домена Owner и Renter как подклассы класса Person.

class Person { ... }
class Owner : Person { ... }
class Renter : Person { ... }

Я все еще учусь тому, как собрать все это воедино, что оказывается трудным, учитывая обилие доступной информации, которая иногда является неполной, лишенной контекста или устаревшей. Так что я действительно мог бы использовать некоторые современные руководства. Что мне не понятно:

  • Если бы я использовал модель данных напрямую, мое приложение было бы ответственно за знание этого для создания новой записи владельца (т. Е. Добавить новый экземпляр класса для DbSet ), новая запись Person с тем же идентификатором должна быть добавлена ​​в DbSet . Итак, я предполагаю, что модель домена в слое, который находится поверх слоя данных / персистентности, должна делать нечто подобное, и что AutoMapper позаботится о том, чтобы свойства объекта домена были правильно сопоставлены с объектами данных при правильной настройке.

  • Имея это в виду, при определении модели предметной области, следует ли мне определять отдельное поле OwnerId в классе Owner и каким-либо образом отображать его в AutoMapper? Это кажется мне довольно неаккуратным и зависит от потребителя моего домена, чтобы гарантировать, что OwnerId и PersonId из базового класса имеют одинаковое значение при создании нового владельца.

Мне кажется, что AutoMapper должен поддерживать возможность представления наследования (что он делает с IMappingExression.Include или IMappingExression.IncludeBase) и сопоставлять Owner.PersonId (Domain) с обоими Owner.OwnerId и Person.PersonId в объектах данных. Но я не могу найти практических примеров этого. Возможно, мой Google Fu меня подводит, и мне задали похожий вопрос, но я не смог его найти. Любая помощь или руководство будет высоко ценится.

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