簡體   English   中英

變更追蹤如何在Entity Framework中運作

[英]How change tracking works in Entity Framework

給定以下代碼,EF / DbContext如何知道對客戶對象所做的更改:

class Program
{
    static void Main()
    {
        using(var shopContext = new ShopContext())
        {
            var customer = shopContext.Customers.Find(7);

            customer.City = "Marion";

            customer.State = "Indiana";

            shopContext.SaveChanges();
        }
    }
}

public class ShopContext : DbContext
{
    public DbSet<Customer> Customers { get; set; }
}

public class Customer
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string City { get; set; }
    public string State { get; set; }
}

謝謝

當您從上下文中加載實體時,它會保留一個額外的數據結構-我們稱其為條目。 該條目包含兩組值-原始值和當前值。 當您執行SaveChanges操作時,EF會遍歷您的客戶實體並更新條目中的當前值,以便它們與您實體的真實狀態相匹配-此操作稱為檢測更改 在生成SQL命令期間,EF將比較當前值和原始值,並構建一條SQL更新語句以修改數據庫中已更改的值。 此操作稱為快照更改跟蹤 -EF將快照保留在條目中。

有一種稱為動態更改跟蹤的替代方法,它將在您將值分配給實體的屬性的同時修改條目中的當前值。 動態更改跟蹤具有特定要求(例如,實體中的所有屬性都必須是virtual ),因為它必須在運行時將類包裝到動態代理中。 這曾經是首選方法,但是由於復雜場景中的某些性能問題,快照更改跟蹤當前應該用作默認值。

暫無
暫無

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

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