EF Core 中的 AddorUpdate 方法的替代方法是什么?

what is the Alternate for AddorUpdate method in EF Core?

我想像下面这样使用 EF Core 在通用存储库中实现 ADDorUpdate() 方法吗? 谁能帮帮我?

  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();
    }

您可以检查实体是否存在。 像这样:

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

这样使用。

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

编辑: 由于这是一个通用方法,您应该为该方法创建一个约束才能工作。例如,摘要 class.

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

你的方法应该有这个约束。

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

您的实体应继承自 BaseEntity

简单使用

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();
}

如果你使用复合键,你可以使用我写的下一个方法:

public static void AddOrUpdateRange<TEntity>(this DbSet<TEntity> set, IEnumerable<TEntity> entities)
            where TEntity : class
        {
            foreach (var entity in entities)
            {
                _ = !set.Any(e => e == entity) ? set.Add(entity) : set.Update(entity);
            }
        }