отслеживать измененные данные в asp ядре с помощью ChangingAndChangedNotifications - PullRequest
0 голосов
/ 09 апреля 2020

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

теперь я использую стратегию ChangingAndChangedNotifications:

 protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.HasChangeTrackingStrategy(ChangeTrackingStrategy.ChangingAndChangedNotifications);
        base.OnModelCreating(modelBuilder);
    }

и пишу этот класс:

    public class NotificationEntity : INotifyPropertyChanged, INotifyPropertyChanging 
{

    public event PropertyChangedEventHandler PropertyChanged;
    public event PropertyChangingEventHandler PropertyChanging;
    protected void SetWithNotify<T>(T value, ref T field,
    [CallerMemberName] string propertyName = "")
    {
        if (!Object.Equals(field, value))
        {
            PropertyChanging?.Invoke(this,
            new PropertyChangingEventArgs(propertyName));
            field = value; //
            PropertyChanged?.Invoke(this,
            new PropertyChangedEventArgs(propertyName));
        }
    }
}

и это моя сущность:

  public class User : NotificationEntity
{
    private string _name;
    private string _email;
    public int Id { get; set; }
    public string Name { get => _name; set => SetWithNotify(value, ref _name); }
    public string Email { get => _email; set => SetWithNotify(value, ref _email); }
}

, и я отменяю изменение сохранения следующим образом:

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

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

            foreach (var prop in change.OriginalValues.Properties)
            {
                var originalValue = change.OriginalValues[prop].ToString();
                var currentValue = change.CurrentValues[prop].ToString();
                if (originalValue != currentValue) /
                {

                }
            }
        }
        return base.SaveChanges();
    }

теперь я изменяю Name и использую context.update(user), но в этой строке :

            var modifiedEntities = ChangeTracker.Entries()
    .Where(p => p.State == EntityState.Added || p.State == EntityState.Modified).ToList();

Не могу найти недвижимость Name.

как узнать, что список свойств был изменен или добавлен с помощью ChangingAndChangedNotifications Стратегия ?????

...