что такое альтернативный метод AddorUpdate в EF Core? - PullRequest
1 голос
/ 18 июня 2020

Я хочу использовать метод ADDorUpdate () в репозитории Generi c с помощью EF Core, как показано ниже? Кто-нибудь может мне помочь?

  public virtual void AddOrUpdate(T entity)
    {
        #region Argument Validation

        if (entity == null)
        {
            throw new ArgumentNullException("entity");
        }
        #endregion
         DbSet.AddOrUpdate(e => e.Id, entity);  
        this.DbContext.SaveChanges();
    }

Ответы [ 2 ]

0 голосов
/ 18 июня 2020

Просто используйте

context.Update(entity);

Это точно AddOrUpdate на основе значения объекта PrimaryKey (0 означает Добавить,> 0 означает Обновление):

public virtual void AddOrUpdate(T entity)
{
    if (entity == null)
        throw new ArgumentNullException("entity");

     this.DbContext.Update(entity);  
     this.DbContext.SaveChanges();
}
0 голосов
/ 18 июня 2020

Вы можете проверить, существует ли сущность. Примерно так:

book exists= context.Set<T>().Any(x=>x.Id==entity.Id);

Используйте вот так.

if(exists)
context.Set<T>().Add(entity);
else
context.Set<T>().Update(entity);

Изменить: поскольку это общий c метод, вы должны создать ограничение на метод, чтобы это работало. Например, абстрактный класс.

public abstract class BaseEntity
{
public int Id {get; set; }
}

Тогда ваш метод должен иметь это ограничение.

public virtual void AddOrUpdate(T entity)
 where T: BaseEntity{}

Ваша сущность должна наследовать от BaseEntity.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...