解决 Entity Framework 4.1 中“实体对象被多个 IEntityChangeTracker 实例引用”的问题
在使用 Entity Framework 4.1 保存包含实体引用的实体时,可能会遇到异常“ADO.Net Entity Framework 实体对象不能被多个 IEntityChangeTracker 实例引用”。 此异常通常发生在多个 Entity Framework 上下文管理同一实体时。
例如,代码片段中,EmployeeService
和 CityService
两个服务类分别创建了各自的上下文实例。当 city1
实体从 CityService
中检索时,它被附加到 CityService
的上下文。随后,当创建 e1
员工实体并将其引用分配给 city1
时,这两个实体都被添加到 EmployeeService
的上下文中。
结果,city1
被附加到两个不同的上下文中,从而导致异常。
解决方法:
方法一:使用单一上下文
创建单个上下文实例,并将其注入到 EmployeeService
和 CityService
两个服务类中:
<code class="language-csharp">var context = new YourDbContext(); // 创建单例上下文 EmployeeService es = new EmployeeService(context); CityService cs = new CityService(context); // 使用相同的上下文实例</code>
方法二:合并服务
将相关的实体合并到单个服务中,由该服务负责所有实体交互。这种方法简化了实体之间关系的操作。
通过以上方法,您可以避免“实体对象不能被多个 IEntityChangeTracker 实例引用”的异常,并成功保存包含实体引用的实体。
以上是如何解决 Entity Framework 4.1 中的'IEntityChangeTracker 的多个实例引用实体对象”异常?的详细内容。更多信息请关注PHP中文网其他相关文章!