Как получить идентификатор от объекта для Auditlog в Entity Framework 6C#

Место общения программистов C#
Ответить
Anonymous
 Как получить идентификатор от объекта для Auditlog в Entity Framework 6

Сообщение Anonymous »

Я знаю, что существует несколько похожих сообщений, но я не могу найти ни одного с решением этой проблемы.

Я хочу добавить (своего рода) AudioLog при добавлении, изменении или удалении объектов (мягкое удаление) в Entity Framework 6. Я переопределил SaveChanges, и поскольку я хочу добавлять записи журнала только для добавленных, измененных или удаленных состояний Entity, я извлекаю список перед вызовом Сохраняем изменения с первого раза. Проблема в том, что поскольку мне нужно зарегистрировать, какая операция была выполнена, мне нужно проверить EntityState объектов. Но после вызова SaveChanges EntityState остается неизменным для всех записей.

public override int SaveChanges()
{
using (var scope = new TransactionScope())
{
var modifiedEntries = ChangeTracker.Entries()
.Where(e => e.State == EntityState.Added || e.State == EntityState.Deleted || e.State == EntityState.Modified)
.ToList();

int changes = base.SaveChanges();
foreach (var entry in modifiedEntries)
{
ApplyAuditLog(entry);
}

base.SaveChanges();
scope.Complete();
return changes;
}
}

private void ApplyAuditLog(DbEntityEntry entry)
{
ILog entity = entry.Entity as ILog;

if (entity != null)
{
LogOperation operation;
switch (entry.State)
{
case EntityState.Added:
operation = LogOperation.CreateEntity;
break;
case EntityState.Deleted:
operation = LogOperation.DeleteEntity;
break;
case EntityState.Modified:
operation = LogOperation.UpdateEntity;
break;
default:
throw new ArgumentOutOfRangeException();
}

AuditLog log = new AuditLog
{
Created = DateTime.Now,
Entity = entry.Entity.GetType().Name,
EntityId = entity.Id,
Operation = operation,
};

AuditLog.Add(log);
}
}


Подробнее здесь: https://stackoverflow.com/questions/197 ... ramework-6
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»