Executing DeleteOnSubmit(), SubmitChanges(), InsertOnSubmit(

本文关键字:InsertOnSubmit SubmitChanges DeleteOnSubmit Executing | 更新日期: 2023-09-27 18:22:50

我正在开发一个WP7 mango应用程序,该应用程序使用Linq2SQL进行数据访问。我有一个Note实体,它有一个类型为int.的自动生成密钥

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

然后,如果我想在删除第一个注释后添加一个新注释,我会得到一个异常,表明该实体已经存在。我得出的结论是,尽管我在数据上下文中调用了SubmitChanges,但Id为0的第一个实体仍未被删除。

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

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

它表示无法添加已存在的实体。对这种行为有什么解释吗?提前谢谢。

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

Executing DeleteOnSubmit(), SubmitChanges(), InsertOnSubmit(

你最后真的回答了自己的问题。让我们来了解一下:

  1. 从数据库获取DbContext
  2. 您正在删除条目并提交数据库(OK fine)
  3. 现在,在这个插入中,您将使用数据库的OLD实例

每次你制作

SubmitChanges();

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

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

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