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