首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >实体框架黑客攻击

实体框架黑客攻击
EN

Stack Overflow用户
提问于 2012-01-30 18:34:24
回答 1查看 738关注 0票数 0

我有一个名为DocumentItem的实体。它有一个由两列组成的自然键: DocumentId (文档的id)和Index (项目在文档上的位置)。

这是一个自然的关键字,所以有时它必须改变。Entity Framework阻止对键的更改。但是,我已经设法将插入/更新/删除绑定到存储过程。它们获得一个额外的参数- NexIndex,在执行存储过程时,该参数将成为DocumentItem的新索引。

然而,有一个问题:管理对象状态管理器,使其具有当前有效的信息。想象一下这样的情况:

包含文档项目的文档:

        1. 5.

用户删除数字3并添加一个新位置(总是在最后,用户不能重新排序项目)。

更改列表:删除3 (ok)更新4 -> 3 (ok)更新5 -> 4 (ok)插入5-这是它中断的地方

问题是Entity Framework不知道索引的变化。我试图从数据库绑定回索引,但它总是导致异常“无法确定有效的操作顺序...”。

现在的情况如下: EF认为它已经有索引为5的项,所以最后一次插入中断。

我需要做一些事情来清除更新项的对象状态,这样我就可以添加新的项,或者从数据库附加或下载它们。我能做什么?

EN

回答 1

Stack Overflow用户

发布于 2012-01-30 19:08:18

用数据库做这件事通常是一件很痛苦的事情。您可以将order列放在数据库中,但不要将其用作没有间隙的“真正的order”。如果您删除了order =3的项目,那么就删除它吧。将会有一个差距。当您插入新项目时,请将其添加为order = 6。您的项目仍将按正确顺序排序。

如果你不喜欢这个想法,回到ADO.NET或者不要把order作为key的一部分。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9062503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档