在Entity框架中,尝试运行以下代码:
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 :(得分:0)
问题在于您将附加到上述代码(customerService
?)中未显示的一个上下文的实体与另一个附加到{buildId
的实体ctx
相关联。 1}}。不要那样做。一次使用一个上下文。
答案 1 :(得分:0)
“customerService”(或者可能是“schema”)属于另一个EntityTracker。摆脱这种情况的最简单方法是在代码中添加以下代码行,其中加载了customerService (注意,在此处对customerService的类名做出假设):
ctx.CustomerService.MergeOptions = MergeOptions.NoTracking;
这行代码告诉上下文“我不打算对CustomerService对象进行任何更改,所以不要去追踪它们”。