Как лучше обновлять данные в EF Core? - PullRequest
0 голосов
/ 13 января 2019

Каков наилучший способ обновления данных в ядре EF в приложении ядра asp.net? Я могу сделать это так

public class Repository<T> : IRepository<T> where T : BaseEntity
{
    private DbContext context;
    private DbSet<T> entities;
    public Repository(DbContext context)
    {
        this.context = context;
        this.entities = context.Set<T>();
    }
    public void Update(T entity)
    {
        T exist = this.entities.Find(entity.Id);
        this.context.Entry(exist).CurrentValues.SetValues(entity);  

        this.context.SaveChanges();
    }

}

Или я могу использовать метод Update () DbSet. Но чтобы использовать его, мне нужно сначала установить QueryTrackingBehavior на «no-tracking», примерно так:

public class Repository<T> : IRepository<T> where T : BaseEntity
{
    private DbContext context;
    private DbSet<T> entities;
    public Repository(DbContext context)
    {
        this.context = context;
        this.context.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;
        this.entities = context.Set<T>();
    }
    public void Update(T entity)
    {
        this.entities.Update(entity); 

        this.context.SaveChanges();
    }

}

Это хорошая идея? Какой вариант лучше и почему?

1 Ответ

0 голосов
/ 13 января 2019

Согласно EF Core документация

SetValues ​​помечает только измененные свойства, значения которых отличаются от значений в отслеживаемом объекте. Это означает, что при отправке обновления будут обновляться только те столбцы, которые действительно были изменены. ( А если ничего не изменилось, то обновление вообще не будет отправлено. )

Так что я думаю, что ваш первый подход (this.context.Entry(exist).CurrentValues.SetValues(entity);) должен быть лучшим для обновления сущности!

...