use*_*682 5 .net c# repository sql-update entity-framework-core
在asp.net核心应用程序中更新EF核心数据的最佳方法是什么?我可以这样做
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();
}
}
Run Code Online (Sandbox Code Playgroud)
或者我可以使用 DbSet 的 Update() 方法。但是要使用它,我需要首先将 QueryTrackingBehavior 设置为“无跟踪”,如下所示:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
这是个好主意吗?什么选择更好,为什么?
Tan*_*jel 10
SetValues 只会将与被跟踪实体中具有不同值的属性标记为已修改。这意味着当更新被发送时,只有那些实际改变的列才会被更新。(如果没有任何变化,则根本不会发送更新。)
所以我认为您的第一种方法 ( this.context.Entry(exist).CurrentValues.SetValues(entity);) 应该是更新实体的最佳方法!
| 归档时间: |
|
| 查看次数: |
10420 次 |
| 最近记录: |