Tengo una aplicación web ASP.NET MVC3 con capas UI, Business (entidades) y Data (DbContext). Estoy utilizando Entity Framework 4.1 Code First. En este momento, estoy anulando el DbContext.SaveChanges()
en la capa de datos para que pueda configurar el ModifiedDate
para todos los cambios realizados a cualquier objeto de entidad que implemente mi interfaz IAuditable
. Tengo una clase y método static DateProvider
(GetCurrentDate) que devuelve DateTime.Now
(a menos que esté ejecutando una prueba, en cuyo caso, devuelve lo que le dije).Reemplazando SaveChanges y estableciendo ModifiedDate, pero ¿cómo configuro ModifiedBy?
Me gustaría configurar automáticamente la propiedad ModifiedBy
para el usuario actual también. ¿Cuál es la mejor manera de hacer esto? ¿Hay algo construido en el marco que me permita acceder a esta información o tengo que configurar algo así como la clase DateProvider
? Este es un entorno de Active Directory y usamos WindowsAuthentication
en IIS.
Aquí está mi código 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();
}
Me gusta mucho el método de inyección del constructor. ¡Gracias! – norepro
Sí, gran idea, la inyección del constructor. – ProfK