我想實現一個受約束的'審計日誌'屬性更改到一組類中的屬性。我已經成功地找到了如何設置CreatedOn | ModifiedOn類型的屬性,但我無法找到如何'找到'已被修改的屬性。實體框架4.1 DbContext覆蓋SaveChanges審計屬性更改
例子:
public class TestContext : DbContext
{
public override int SaveChanges()
{
var utcNowAuditDate = DateTime.UtcNow;
var changeSet = ChangeTracker.Entries<IAuditable>();
if (changeSet != null)
foreach (DbEntityEntry<IAuditable> dbEntityEntry in changeSet)
{
switch (dbEntityEntry.State)
{
case EntityState.Added:
dbEntityEntry.Entity.CreatedOn = utcNowAuditDate;
dbEntityEntry.Entity.ModifiedOn = utcNowAuditDate;
break;
case EntityState.Modified:
dbEntityEntry.Entity.ModifiedOn = utcNowAuditDate;
//some way to access the name and value of property that changed here
var changedThing = SomeMethodHere(dbEntityEntry);
Log.WriteAudit("Entry: {0} Origianl :{1} New: {2}", changedThing.Name,
changedThing.OrigianlValue, changedThing.NewValue)
break;
}
}
return base.SaveChanges();
}
}
那麼,有沒有訪問與EF 4.1的DbContext這些細節的更改屬性的方法嗎?
這個工程,但似乎所有的屬性都根據這個修改。將進一步調查,但對原來的問題罰款。我認爲這給了我需要的東西。 – 2011-06-01 18:32:52
這不適合我。舊的價值永遠是空的。這隻適用於POCO和4.1及更高版本嗎? – Jonx 2012-02-06 22:06:11
@Jonx:是的,它是EF 4.1('DbContext')和POCO。對於<= EF 4.0('ObjectContext'),你可以做類似的事情,唯一的區別是你不會覆蓋SaveChanges,而是實現一個事件處理器('OnSavingChanges'或類似的,我不記得)。 – Slauma 2012-02-07 21:20:05