Entity Framework4让我抓狂,这种情况是:
员工实体-多对多关联-部门实体
我从EmployeeRepository获得员工,从DepartmentRepository获得部门的员工。每个存储库都使用自己的数据上下文。我的UI有一个部门列表(从DepartmentRepository)可供员工选择。
当为雇员选择了一个部门时,它从DepartmentRepository数据上下文中绑定了一个部门,所以当我试图保存一个雇员时,它会报错并抛出一个漂亮的异常。
我需要将部门的数据上下文与员工的数据上下文分开,因为部门可以修改,调用DepartmentRepository上的保存更改也不能保存员工。
单独的数据上下文非常适合我的多对0或1关联,因为我只能绑定外键属性,而不是实体实例。
我能想到的唯一解决办法是修复关联中的集合,方法是创建另一个具有与EmployeeRepository相同的数据上下文的DepartmentRepository,并使用EmployeeRepository数据上下文解析DepartmentRepository部门和从DepartmentRepository中提取的部门,但这只是一个糟糕的设计和不可接受的“解决方案”。
在这一点上,我不关心代码生成策略(尽管POCO会很好),我真的只需要一些可以工作的东西,并且实体框架4在创建模型定义方面并不糟糕,所以我想坚持使用它。
发布于 2010-09-02 05:43:11
选中上下文上的分离和附加方法。您可以将实体从一个上下文中分离,然后将其附加到另一个上下文。但在这种情况下,您将丢失更改跟踪,并且您将不得不通过context.ObjectStateManager.ChangeObjectState手动设置实体的状态。
但是你应该认真考虑一下你的应用程序的设计。在上述场景中,您不应该使用两个不同的对象上下文。
发布于 2010-09-02 05:49:48
问题的根本原因是您需要在两个存储库之间分离数据上下文。为了管理多对多关系,EF依赖于所有内容都在一个对象上下文中。
如果您确实需要在这两个上下文之间强制分离,您可以显式地将多对多关系建模,即将中间对象建模为两个多对一关系:
部门- DepartmentEmployee -员工
DepartmentEmployee对象在这两个上下文中都是“已知的”。通过DepartmentRepository,您可以添加/删除员工(仅通过其Id ),反之亦然。不应该有从DepartmentEmployee到部门或Employee的导航属性。
https://stackoverflow.com/questions/3622323
复制相似问题