首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >执行DeleteOnSubmit()、SubmitChanges()、InsertOnSubmit()、SubmitChanges()不起作用(抛出实体已存在异常)!

执行DeleteOnSubmit()、SubmitChanges()、InsertOnSubmit()、SubmitChanges()不起作用(抛出实体已存在异常)!
EN

Stack Overflow用户
提问于 2012-02-08 02:15:40
回答 1查看 3.3K关注 0票数 1

我正在开发一个使用Linq2SQL进行数据访问的WP7芒果应用程序。我有一个Note实体,它有一个int类型的自动生成的键。

当我第一次向数据库添加新注释时,操作正常,该注释保存,然后如果我将其从数据库中删除,它也会从数据库中删除。第一个实体始终是Id=0的。

然后,如果我想在删除第一个注释后添加一个新注释,我会得到一个异常,说明该实体已经存在。我的结论是,即使我在数据上下文中调用了SubmitChanges,第一个具有Id=0的实体也没有被删除。

此外,我在我的存储库和同一存储库实例上使用相同的数据上下文进行数据操作(出于性能原因,这是一个单例)。为了确认这一行为,我尝试进行连续的调用,但都失败了!

代码语言:javascript
复制
this.DbContext.Notes.DeleteOnSubmit(value);
this.DbContext.SubmitChanges();
this.DbContext.Notes.InsertOnSubmit(value);
this.DbContext.SubmitChanges();

它说它不能添加已经存在的实体。对这种行为有什么解释吗?提前谢谢。

注意:当我使用数据上下文的两个不同实例时,这个行为消失了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-08 02:44:50

好吧,你最后回答了你自己的问题。让我们一步一步来:

  1. 您从数据库中获取DbContext
  2. 您删除条目并提交数据库(OK,很好)
  3. 现在在此插入中使用数据库的旧实例。

每次你做一个

代码语言:javascript
复制
SubmitChanges();

您已经更新了您的参考资料,因为它是旧的。

因此,如果你有一个做多个事务的方法,你需要刷新你的局部变量。

数据库的ONE实例应执行ONE更改

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

https://stackoverflow.com/questions/9181558

复制
相关文章

相似问题

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