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