Я начал с создания таких моделей:
public abstract class EditableBase
{
public DateTime CreatedOn { get; set; }
public DateTime ModifiedOn { get; set; }
public int CreatedBy { get; set; }
public int ModifiedBy { get; set; }
}
public class Project : EditableBase
{
public int ProjectId { get; set; }
public string ProjectName { get; set; }
}
И я использую эту строку при запуске приложения:
Database.SetInitializer<ModelContext>(
new DropCreateDatabaseIfModelChanges<ModelContext>());
Таблица с именем Projects создается со всеми свойствами, упомянутыми выше в виде столбцов ... это именно то, что я хотел.
Однако теперь мне нужно заполнить некоторые значения по умолчанию, когда я вызываю SaveChanges () в DbContext. Когда я сохраняю, мне нужно обновить свойства ModifiedOn и ModifiedBy с соответствующими значениями.
Обычно я бы, по крайней мере, делал значения DateTime на стороне базы данных (либо триггер, либо хранимая процедура), однако здесь явно не вариант поскольку база данных будет удалена при изменении класса. И поскольку я сначала написал код, у меня нет конструктора моделей, на котором я мог бы настроить свойства.
Я бы хотел добавить метод в класс EditableBase, который вызывается при выполнении SaveChanges (), таким образом сохраняя всю задействованную логику в одном месте. Можно ли это сделать? Как лучше всего достичь моей цели?