EF4(モデルファースト)アプリケーションに監査を追加する処理中です。私は変更があるエンティティの構造プロパティーについて詳しく知ることができます。私は、多対多の関係に変更があったときも見ることができます。私は関係するタイプの名前と何が起こったか(追加または削除)を見ることができますが、私が本当に好きなのは、関係の変更に関与するエンティティのIDです。ここでEF4多対多関係の変更の監査
は、私は現在、多くの関係に多くの変更を追跡するために持っているものです。
var changes = context.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Deleted | EntityState.Modified);
var auditTime = DateTime.Now;
foreach (var change in changes)
{
if (change.Entity != null && change.Entity.GetType().Equals(typeof(AuditTrail)))
{
continue;
}
var detailsBuilder = new StringBuilder();
if (change.Entity == null & (change.State == EntityState.Added | change.State == EntityState.Deleted))
{
detailsBuilder.Append("A link between entities ");
foreach (var changedMember in change.EntitySet.ElementType.KeyMembers)
{
detailsBuilder.AppendFormat("{0}", changedMember.Name);
if(change.EntitySet.ElementType.KeyMembers.IndexOf(changedMember) < change.EntitySet.ElementType.KeyMembers.Count -2)
{
detailsBuilder.Append(", ");
}
else if (change.EntitySet.ElementType.KeyMembers.IndexOf(changedMember) == change.EntitySet.ElementType.KeyMembers.Count - 2)
{
detailsBuilder.Append(" and ");
}
}
detailsBuilder.AppendFormat(" was {0}.<br />", change.State);
}
}
私は関係の変更に関わる詳細(あるいは実際の実体)を取得できますか?
私は、私は必要な情報を見つけるために管理している少数のより多くの時間のチャンスをうかがった後、UPDATE
(添付画像を参照してください)。しかし、データを格納するクラスは内部密閉クラスであり、この情報を返すためにオブジェクト状態マネージャに問い合わせるパブリックエントリを見つけることができません。だから私は変更を監査することができます。
はあなたがこれを理解しましたか? – DDiVita
いいえ、しかし、私は@Icrepasからの選択肢が有望であることを覚えています。 – ilivewithian