EntityFramework Core: получение изменений в сущности и связанных данных - PullRequest
0 голосов
/ 30 октября 2018

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

Я знаю, как получить имена свойств, которые изменились в одной сущности:

 dbContext.Entry(entity).Properties.Where(x => x.IsModified).Select(x => x.Metadata.Name).ToList();

Как сделать то же самое для связанных данных в свойствах навигации?

1 Ответ

0 голосов
/ 30 октября 2018

Основываясь на этой статье (Отслеживание изменений сущностей с использованием DbContext в Entity Framework 6) , вы должны переопределить метод SaveChanges() для отслеживания изменений сущностей и связанных с ними сущностей.

public override int SaveChanges()
{
    return base.SaveChanges();
} 

На самом деле, вы должны изменить приведенный выше код на следующий пример:

public override int SaveChanges()
{
    var modifiedEntities = ChangeTracker.Entries()
        .Where(p => p.State == EntityState.Modified).ToList();
    var now = DateTime.UtcNow;

    foreach (var change in modifiedEntities)
    {
        var entityName = change.Entity.GetType().Name;
        var primaryKey = GetPrimaryKeyValue(change);

        foreach(var prop in change.OriginalValues.PropertyNames)
        {
            var originalValue = change.OriginalValues[prop].ToString();
            var currentValue = change.CurrentValues[prop].ToString();
            if (originalValue != currentValue) //Only create a log if the value changes
            {
                //Create the Change Log
            }
        }
    }
    return base.SaveChanges();
}
...