WebAPI, Entity Framework - Заполнить поля аудита для каждого объекта (CreatedOn, CreatedByUserId, ModifiedOn, ModifiedByUserId) - PullRequest
0 голосов
/ 20 марта 2020

У меня немного сложная ситуация, и мне нужна помощь здесь. Я разрабатываю приложение WebAPI в C#, используя архитектуру доменного управления и используя Code First с использованием Entity Framework. Это почти завершено, но я хочу провести рефакторинг.

Таким образом, его WebAPI обращается к прикладному уровню, который получает объекты репозитория с помощью конструктора Injection в Application и подключается к базе данных с помощью EF. Отдельный объект Domain имеет все сущности. Прикладной уровень получает доменные объекты, преобразует их в ViewModels (DTO) и отправляет в API.

Пока все работает, некоторым из моих сущностей требуется информация аудита, например, CreatedOn, ModifiedOn, CreatedByUserId, ModifiedByUserId.

Поэтому в настоящее время я вручную добавляю эти значения на прикладном уровне для заполнения DTO, затем заполняю объект домена / сущности с помощью automapper и вызываю репозиторий для вставки или обновления.

Я хочу провести рефакторинг этого кода, так как число объектов увеличивается, этот код повторяется, например,

SomeDTO.CreatedOn = DateTime.Now (), SomeDTO.CreatedBy = userId et c ...

Мой текущий дизайн сущности выглядит примерно так:

publi c class SomeEntity: Entity и Entity определены как Publi c class Entity {publi c Идентификатор Guid;}

Теперь я думаю, что AuditInfo в этой родительской сущности будет иметь следующие строки:

Итак, измените его на: publi c class SomeEntity: AuditEntity и Entity определены как Publi c class AuditEntity {publi c Идентификатор Guid; publi c DateTime CreatedOn; publi c Guid CreatedByUserId et c ..} Но я просто не могу понять, как и когда заполнять этот AuditEntity и как подключить его к SomeEntity.

То, что я хотел бы сделать, - это заполнить этот объект Audit один раз при каждом вызове и каким-то образом добавить его к объекту, возможно, используя преобразование автоматического преобразователя, если это возможно. Любые хиты будут высоко оценены.

Спасибо

...