Possiedo un'applicazione Web ASP.NET MVC3 con livelli UI, Business (entità) e Dati (DbContext). Sto usando il codice di Entity Framework 4.1 First. In questo momento, sto sovrascrivendo lo DbContext.SaveChanges()
nel livello dati in modo da poter impostare ModifiedDate
per tutte le modifiche apportate a qualsiasi oggetto entità che implementa la mia interfaccia IAuditable
. Ho una classe statica DateProvider
e un metodo (GetCurrentDate) che restituisce DateTime.Now
(a meno che non stia eseguendo un test, nel qual caso restituisce tutto ciò che gli ho detto).Sovrascrittura di SaveChanges e impostazione di ModifiedDate, ma come si imposta ModifiedBy?
Desidero impostare automaticamente la proprietà ModifiedBy
anche all'utente corrente. Qual è il modo migliore per farlo? C'è qualcosa che è costruito nel framework che mi consentirà di accedere a queste informazioni o devo impostare qualcosa di simile alla classe DateProvider
? Questo è un ambiente Active Directory e utilizziamo WindowsAuthentication
in IIS.
Ecco il mio codice 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();
}
Mi piace molto il metodo di iniezione del costruttore. Grazie! – norepro
Sì, ottima idea, l'iniezione del costruttore. – ProfK