我有一个大的实体“图表”,我以断开连接的方式使用这些实体。它们是 POCO 实体,实现了我自己的简单更改跟踪标志(IsNew、IsChanged、IsDeleted)。当需要保存更改时,我将整个图表传递回业务层,它执行以下操作:-
context.Batches.Attach(batch);
其中batch
是图层次结构最顶层的实体。这具有“级联效应”并附加图中的所有实体,这些实体最终都处于未更改的状态。ObjectStateManager
然后,我根据我的更改跟踪标志的值,通过 设置每个实体的状态的层次结构。
这种方法的问题是需要为新实体分配唯一的 ID(尽管是“身份”列)。我不能将它们全部保留为 0,否则将Attach
失败并显示消息“具有相同键的对象已经存在......”。
必须分配临时的唯一 ID 开始变得有点混乱,我想知道是否有更好的解决方案。我想知道我是否可以遍历图表并一次执行一个Attach
或一个Add
实体(基于我的更改跟踪标志),但这似乎是不可能的,因为这两种方法都“级联”,导致所有子实体都得到也添加或附加。有没有办法解决?
我正在使用 EF5,ObjectContext 模板,如果这有所作为。