У меня есть модель сущности, в которой имеется информация аудита для каждой таблицы (более 50 таблиц)
CreateDate
CreateUser
UpdateDate
UpdateUser
В настоящее время мы программно обновляем информацию аудита.
Пример:
if(changed){
entity.UpdatedOn = DateTime.Now;
entity.UpdatedBy = Environment.UserName;
context.SaveChanges();
}
Но я ищу более автоматизированное решение. Во время сохранения изменений, если объект создается / обновляется, я хотел бы автоматически обновить эти поля перед отправкой их в базу данных для хранения.
Любое предложение о том, как я мог бы сделать это? Я бы предпочел не делать никаких размышлений, поэтому использование текстового шаблона не исключено.
Было предложено решение переопределить SaveChanges и сделать это там, но для достижения этого мне либо пришлось бы использовать отражение (в котором я этого не хочу), либо получить базовый класс. Предполагая, что я пойду по этому маршруту, как бы я достиг этого?
Например
EXAMPLE_DB_TABLE
CODE
NAME
--Audit Tables
CREATE_DATE
CREATE_USER
UPDATE_DATE
UPDATE_USER
А если я создам базовый класс
public abstract class IUpdatable{
public virtual DateTime CreateDate {set;}
public virtual string CreateUser { set;}
public virtual DateTime UpdateDate { set;}
public virtual string UpdateUser { set;}
}
Конечная цель - сделать что-то вроде ...
public overrride void SaveChanges(){
//Go through state manager and update audit infromation
//FOREACH changed entity in state manager
if(entity is IUpdatable){
//If state is created... update create audit.
//if state is updated... update update audit
}
}
Но я не уверен, как мне поступить с генерацией кода, который расширил бы интерфейс.