gpt4 book ai didi

c# - 在 EF Core 中更新数据的更好方法是什么

转载 作者:行者123 更新时间:2023-11-30 22:56:45 24 4
gpt4 key购买 nike

在 asp.net core 应用程序中更新 EF core 中的数据的最佳方法是什么?我可以这样做

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

}

或者我可以使用 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();
}

}

这是个好主意吗?哪种选择更好,为什么?

最佳答案

根据 EF Core documentaion

SetValues will only mark as modified the properties that have different values to those in the tracked entity. This means that when the update is sent, only those columns that have actually changed will be updated. (And if nothing has changed, then no update will be sent at all.)

所以我认为您的第一种方法 (this.context.Entry(exist).CurrentValues.SetValues(entity);)应该是更新实体的最佳选择!

关于c# - 在 EF Core 中更新数据的更好方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54169736/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com