質問

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フォーラム.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top