簡體   English   中英

如何避免在實體框架中分散多個上下文

[英]How to avoid spinning up multiple contexts in entity framework

在實體框架中,嘗試運行以下代碼:

        using (MyEntities ctx = new myEntities())
        {
            Entity.Customers.Build buildId = new ctx.Build();
            buildId.CustomerService = customerService;
            buildId.datCreatedDate = DateTime.Now;
            buildId.strBuildSchema = schema;
            buildId.Status = "Success";
            ctx.AddToBuilds(buildId);
            ctx.SaveChanges();
        }

導致錯誤“ IEntityChangeTracker的多個實例無法引用實體對象”。

據我所知,問題在於我正在創建的Build對象來自實體框架上下文的新實例,該實例不同於執行AddToBuilds()語句的上下文。

但是我無法解決該問題。 我似乎無法從實體上下文對象的實例(即上面的代碼中的ctx)直接創建新的Build? 有沒有辦法做到這一點,還是我錯過了另一個明顯的解決方法?

干杯,馬特

問題在於,您正在將一個附加到一個上下文的實體(上面的代碼( customerService嗎?)中未顯示)與另一個附加到ctx實體buildId 不要那樣做 一次使用一個上下文。

“ customerService”(或“ schema”)屬於另一個EntityTracker。 消除此問題的最簡單方法是在加載了customerService的代碼中添加以下代碼行(請注意,在此處對customerService的類名進行假設):

ctx.CustomerService.MergeOptions = MergeOptions.NoTracking;

這行代碼告訴上下文“我將不會對CustomerService對象進行任何更改,因此不必費心跟蹤它們”。

暫無
暫無

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

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