防止实体框架 4.1 中的实体引用冲突
实体框架可能会抛出“实体对象无法被 IEntityChangeTracker 的多个实例引用”异常。当不同的上下文尝试同时管理同一实体时,就会发生这种情况。 当保存具有从单独上下文加载的相关对象的实体时,通常会发生这种情况。
问题:
想象一下单独的服务,例如 EmployeeService
和 CityService
,每个服务都创建自己的实体框架上下文。如果 CityService
加载一个城市,并且 EmployeeService
随后将同一城市添加给员工,则会出现冲突,因为该城市由两个不同的上下文跟踪。
解决方案:
关键是使用单一的共享上下文。 将此上下文注入到两个服务中:
<code class="language-csharp">var context = new YourDbContext(); // Create the context once EmployeeService es = new EmployeeService(context); CityService cs = new CityService(context); // Both services use the same context</code>
更优雅的解决方案可能是将相关实体合并到单个服务中。例如,创建 EmployeeService
,而不是 CityService
和 EmployeeCityService
。这简化了上下文管理并防止冲突。
以上是如何防止 Entity Framework 4.1 中出现'实体对象不能被 IEntityChangeTracker 的多个实例引用”异常?的详细内容。更多信息请关注PHP中文网其他相关文章!