エンティティフレームワークは、追跡APIと参照エントリを変更します
-
26-10-2019 - |
質問
DBContextサブクラスに一般的な監査コードを作成したいと考えています。
foreach (var entry in this.ChangeTracker.Entries<MyClass>())
{
if (entry.State == EntityState.Modified)
{
var entityProperties = entry.Entity.GetType().GetProperties();
foreach (var entityProperty in entityProperties)
{
DbMemberEntry propertyEntry = entry.Member(property.Name);
if (propertyEntry is DbPropertyEntry)
{
// IsModified available
}
else if (propertyEntry is DbReferenceEntry)
{
// IsModified not available
}
}
}
}
1)参照プロパティのみを変更する場合、entry.state値は「変更されていません」。
2)ポイント1が「修正」に設定されていても、dbreferenceentryクラスにはISModifiedプロパティも元の値もないようです。
EFがこれを追跡している必要があるため、これは可能だと思います。
誰かが助けることができますか?
ありがとう、ベン
解決
はい参照エントリ(ナビゲーションプロパティ)は変更を追跡しません。これは、外国の主要財産の責任(外部キー協会の場合)または独立協会の変更の変更を別々に追跡することです。 ObjectContext APIでは、これらのオブジェクトを取得できます ObjectStateManager
ただし、DBContext APIにはこれが利用できないようです。私はこれについて質問しました MSDNフォーラム.
所属していません StackOverflow