[英]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.