Inspekcja w ramach Entity Framework
Po przejściu przez Entity Framework mam kilka pytań dotyczących implementacji inspekcji w Entity Framework.
Chcę przechowywać każdą wartość kolumny, która jest tworzona lub aktualizowana do innej tabeli kontroli.
W tej chwili wywołuję SaveChanges (false), aby zapisać rekordy w DB (wciąż zmiany w kontekście nie są resetowane). Następnie uzyskaj dodane | zmodyfikowane rekordy i pętla przez GetObjectStateEntries. Ale nie wiem, jak uzyskać wartości kolumn, w których ich wartości są wypełniane przez zapisany proc. tj. utworzone, zmodyfikowane dane itp.
Poniżej znajduje się przykładowy kod, nad którym pracuję.
// 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
}
}