7

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の値は「Unchanged」です。

2)ポイント1が「Modified」に設定されていても、DbReferenceEntryクラスにはIsModifiedプロパティも元の値も含まれていないようです。

EFがこれを追跡している必要があるため、これは可能だと思います。

誰か助けてもらえますか?

ありがとう、ベン

4

1 に答える 1

7

はい、参照エントリ (ナビゲーション プロパティ) は変更を追跡しません。これは、外部キー プロパティ (外部キー アソシエーションの場合) または独立したアソシエーションの変更を追跡する別のオブジェクトの責任です。ObjectContext API ではこれらのオブジェクトを取得できますがObjectStateManager、DbContext API ではこれが利用できないようです。これについてMSDN フォーラムで質問しました。

于 2011-03-17T09:03:07.907 に答える