У меня есть веб-приложение ASP.NET MVC3 с уровнями пользовательского интерфейса, бизнеса (сущности) и данных (DbContext). Сначала я использую Entity Framework 4.1 Code First. Прямо сейчас я переопределяю DbContext.SaveChanges()
в слое данных, чтобы я мог установить 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();
}