EF 4.3.1を使用していますが、コンテキストでSaveChanges()をオーバーライドして、オブジェクトとその状態のリストを取得し、監査ログテーブルにエントリを作成できるようにしました。レコードのIDを監査ログテーブルに保存して、参照できるようにする必要があります。これは、レコードが挿入されるときに問題になります。保存する前にIDにアクセスできないためです。その時点でIDを取得する方法はありますか?
public override int SaveChanges()
{
ChangeTracker.DetectChanges();
var objectStateManager = ((IObjectContextAdapter)this).ObjectContext.ObjectStateManager;
var modifiedAuditableEntities = objectStateManager.GetObjectStateEntries(EntityState.Modified | EntityState.Added).Where(e => (IAuditable)e.Entity != null);
foreach (var entry in modifiedAuditableEntities)
{
var entity = (IAuditable)entry.Entity;
if (entity != null)
{
switch (entry.State)
{
case EntityState.Added:
entity.IsAdded = true;
break;
case EntityState.Deleted:
entity.IsDeleted = true;
break;
case EntityState.Modified:
entity.IsModified = true;
break;
}
this.EntitySet<AuditLogEntry>().Add(this.auditLogService.CreateAuditLogEntryForEntity((IAuditable)entry.Entity));
}
return base.SaveChanges();
}