У меня есть веб-приложение ASP.NET MVC3 с UI, Business (сущности) и Data (DbContext) слоями. Я использую Entity Framework 4.1 Code First. Сейчас я переопределяю DbContext.SaveChanges()
в слое Data, чтобы я мог установить ModifiedDate
для всех изменений, сделанных в любых объектах сущностей, которые реализуют мой IAuditable
интерфейс. У меня есть статический класс DateProvider
и метод (GetCurrentDate), который возвращает DateTime.Now
(если я не запускаю тест, в этом случае он возвращает то, что я ему сказал).
Я хотел бы автоматически установить свойство ModifiedBy
для текущего пользователя. Каков наилучший способ сделать это? Есть ли что-то встроенное во фреймворк, что позволит мне получить доступ к этой информации, или мне нужно настроить что-то вроде класса DateProvider
? Это среда Active Directory, и мы используем WindowsAuthentication
в IIS.
Вот мой код SaveChanges:
public override int SaveChanges()
{
var changeSet = ChangeTracker.Entries<IAuditable>();
if (changeSet != null)
{
foreach (var entry in changeSet.Where(c => c.State != EntityState.Unchanged))
{
entry.Entity.ModifiedDate = DateProvider.GetCurrentDate();
}
}
return base.SaveChanges();
}