あなたは私たちがエンティティを取得するために変更トラッカAPIを照会しているDbContextのSaveChangesメソッドをオーバーライドして、それが上記のスニペットではdatabase.public
public class ChangeLog
{
public string EntityName { get; set; }
public string PropertyName { get; set; }
public string OldValue { get; set; }
public string NewValue { get; set; }
}
public override int SaveChanges()
{
var modifiedEntities = ChangeTracker.Entries()
.Where(p => p.State == EntityState.Modified).ToList();
foreach (var change in modifiedEntities)
{
var entityName = change.Entity.GetType().Name;
foreach(var prop in change.OriginalValues.PropertyNames)
{
var originalValue = change.OriginalValues[prop].ToString();
var currentValue = change.CurrentValues[prop].ToString();
if (originalValue != currentValue)
{
ChangeLog log = new ChangeLog()
{
EntityName = entityName,
PropertyName = prop,
OldValue = originalValue,
NewValue = currentValue,
};
ChangeLogs.Add(log);
}
}
}
return base.SaveChanges();
}
に保存される前のエンティティに加えられた変更を追跡するためにChangeTrackerを使用する必要があります変更されたもの
var modifiedEntities = ChangeTracker.Entries()
.Where(p => p.State == EntityState.Modified).ToList();
同じ方法で、追加および削除されたエンティティを照会することができます。
編集
object GetPrimaryKeyValue(DbEntityEntry entry)
{
var stateEntry = ((IObjectContextAdapter)this).ObjectContext.ObjectStateManager.GetObjectStateEntry(entry.Entity);
return stateEntry.EntityKey.EntityKeyValues[0].Value;
}
注:アイデンティティ挿入が動作しませんスニペット上記の追加のエンティティのために、その後オンに設定されている場合。
ありがとう@ jenish-rabadiya、この作品は完璧です。 – csuazo
プライマリキーのみを取得できますか? – csuazo
@csuazo私は答えを更新しました。 –