0

我有一个大的实体“图表”,我以断开连接的方式使用这些实体。它们是 POCO 实体,实现了我自己的简单更改跟踪标志(IsNew、IsChanged、IsDeleted)。当需要保存更改时,我将整个图表传递回业务层,它执行以下操作:-

context.Batches.Attach(batch);

其中batch是图层次结构最顶层的实体。这具有“级联效应”并附加图中的所有实体,这些实体最终都处于未更改的状态。ObjectStateManager然后,我根据我的更改跟踪标志的值,通过 设置每个实体的状态的层次结构。

这种方法的问题是需要为新实体分配唯一的 ID(尽管是“身份”列)。我不能将它们全部保留为 0,否则将Attach失败并显示消息“具有相同键的对象已经存在......”。

必须分配临时的唯一 ID 开始变得有点混乱,我想知道是否有更好的解决方案。我想知道我是否可以遍历图表并一次执行一个Attach 一个Add 实体(基于我的更改跟踪标志),但这似乎是不可能的,因为这两种方法都“级联”,导致所有子实体都得到也添加或附加。有没有办法解决?

我正在使用 EF5,ObjectContext 模板,如果这有所作为。

4

1 回答 1

0

Change Tracking首先从上下文中获取当前实体图(使用并启用)会容易得多Proxy Generation,然后遍历每个节点并根据分离图更新/删除/添加数据(使用您自己的内部持久性状态字段)。

于 2013-07-17T10:04:21.990 回答