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);
}
}
我想像下面这样使用 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);
}
}