簡體   English   中英

在 EF Core 中更新數據的更好方法是什么

[英]What is better way to update data in EF 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();
    }

}

或者我可以使用 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 文檔

SetValues 只會將與被跟蹤實體中具有不同值的屬性標記為已修改。 這意味着當更新被發送時,只有那些實際改變的列才會被更新。 如果沒有任何變化,則根本不會發送更新。

所以我認為你的第一種方法( this.context.Entry(exist).CurrentValues.SetValues(entity); )應該是更新實體的最佳選擇!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM