2011-01-28 60 views
0

实体框架旋转起来的多重执行绪,试图运行下面的代码:如何避免实体框架

 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对象来自Entity Framework上下文的新实例,它与执行AddToBuilds()语句的上下文不同。

但是我无法弄清楚如何克服这个问题。我似乎无法通过实体上下文对象的实例创建新的Build,即上面代码中的ctx?有没有办法做到这一点,或者我错过了另一个明显的解决方法?

干杯, 马特

回答

0

的问题是,你相关联,其被附接到一个上下文,在上面的代码(customerService?)与另一个实体,buildId,其被附接至ctx未示出的实体。不要这样做。一次使用一个上下文。

0

“customerService”(或者'schema')属于另一个EntityTracker。摆脱这个最简单的方法是添加在里面装的CustomerService代码下面的代码行(注意,作出有关的CustomerService的类名的假设在这里):

ctx.CustomerService.MergeOptions = MergeOptions.NoTracking; 

这行代码告诉上下文“我不会对CustomerService对象进行任何更改,所以请勿打扰跟踪它们”。