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

时间:2012-02-07 18:15:40

标签: c# silverlight linq-to-sql windows-phone-7

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

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

然后,如果我想在删除第一个音符后添加新音符,我会得到一个例外,说实体已经存在。我得出结论,即使我在数据上下文中调用SubmitChanges,ID = 0的第一个实体也没有被删除。

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

this.DbContext.Notes.DeleteOnSubmit(value);
this.DbContext.SubmitChanges();
this.DbContext.Notes.InsertOnSubmit(value);
this.DbContext.SubmitChanges();

它表示无法添加已存在的实体。 对此行为有何解释? 提前谢谢。

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

1 个答案:

答案 0 :(得分:5)

嗯,你最后真的回答了你自己的问题。让我们一步一步:

  1. 您从数据库中获取DbContext
  2. 您正在删除条目并提交数据库(OK)
  3. 现在,您可以使用数据库的OLD实例进行此插入。
  4. 每次你做一个

    SubmitChanges();
    

    您已更新参考资料,因为它已经过时了。

    因此,如果您有一个执行多个事务的方法,则需要刷新本地变量。

    数据库的一个实例应该 ONE 更改