繁体   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