Entity Frameworkを実行した後、Entity Frameworkでの監査の実装に関する2つの質問があります。Entity Frameworkでの監査
作成または更新された各列の値を別の監査テーブルに保存します。
私は現在、SaveChanges(false)を呼び出してDBにレコードを保存しています(ただし、コンテキストの変更はリセットされません)。その後、追加された|変更されたレコードを取得し、GetObjectStateEntriesをループします。しかし、値がストアドプロシージャによって満たされている列の値を取得する方法を知らないでください。すなわち、作成、変更された日付など。
以下は、私が取り組んでいるサンプルコードです。
- は、データ・ベースでそれをやってC#コード
- は、データベースレベルでそれを実行します。ここでは
// Get the changed entires(ie, records) IEnumerable<ObjectStateEntry> changes = context.ObjectStateManager.GetObjectStateEntries(EntityState.Modified); // Iterate each ObjectStateEntry(for each record in the update/modified collection) foreach (ObjectStateEntry entry in changes) { // Iterate the columns in each record and get thier old and new value respectively foreach (var columnName in entry.GetModifiedProperties()) { string oldValue = entry.OriginalValues[columnName].ToString(); string newValue = entry.CurrentValues[columnName].ToString(); // Do Some Auditing by sending entityname, columnname, oldvalue, newvalue } } changes = context.ObjectStateManager.GetObjectStateEntries(EntityState.Added); foreach (ObjectStateEntry entry in changes) { if (entry.IsRelationship) continue; var columnNames = (from p in entry.EntitySet.ElementType.Members select p.Name).ToList(); foreach (var columnName in columnNames) { string newValue = entry.CurrentValues[columnName].ToString(); // Do Some Auditing by sending entityname, columnname, value } }
でそれを行う
それはあなたがあなたのことを何をしたいのか、あなたが正確に何をすべきかhere-を探しているのは非常に明確ではありません –
私は監査を行いたい(特定のエンティティに対して変更が行われたときに監査テーブルにtablename/entityname、columnname、valueを挿入する) –