我有一个名为DocumentItem的实体。它有一个由两列组成的自然键: DocumentId (文档的id)和Index (项目在文档上的位置)。
这是一个自然的关键字,所以有时它必须改变。Entity Framework阻止对键的更改。但是,我已经设法将插入/更新/删除绑定到存储过程。它们获得一个额外的参数- NexIndex,在执行存储过程时,该参数将成为DocumentItem的新索引。
然而,有一个问题:管理对象状态管理器,使其具有当前有效的信息。想象一下这样的情况:
包含文档项目的文档:
用户删除数字3并添加一个新位置(总是在最后,用户不能重新排序项目)。
更改列表:删除3 (ok)更新4 -> 3 (ok)更新5 -> 4 (ok)插入5-这是它中断的地方
问题是Entity Framework不知道索引的变化。我试图从数据库绑定回索引,但它总是导致异常“无法确定有效的操作顺序...”。
现在的情况如下: EF认为它已经有索引为5的项,所以最后一次插入中断。
我需要做一些事情来清除更新项的对象状态,这样我就可以添加新的项,或者从数据库附加或下载它们。我能做什么?
发布于 2012-01-30 19:08:18
用数据库做这件事通常是一件很痛苦的事情。您可以将order列放在数据库中,但不要将其用作没有间隙的“真正的order”。如果您删除了order =3的项目,那么就删除它吧。将会有一个差距。当您插入新项目时,请将其添加为order = 6。您的项目仍将按正确顺序排序。
如果你不喜欢这个想法,回到ADO.NET或者不要把order作为key的一部分。
https://stackoverflow.com/questions/9062503
复制相似问题