一次插入或更新多个表的最佳做法是什么

时间:2011-07-20 13:41:44

标签: sql wpf linq-to-sql

我已经阅读了一些与我的问题有关的帖子,但不要认为他们以我能理解的方式回答它。我对Linq一般都是SQL和SQL的新手,所以请光临我。

我的问题是这样的。

如果我需要使用一个“操作”更新或插入多个表,例如调用保存信息,其中有多个表包含“信息”。

为了论证,我们假设我们有以下表格:

名称 地址 汽车 工作

并且每次调用保存信息时,都会插入这些表中的每一个。

哪个更好:

  1. 获取必须写入Name表的数据。调用InsertOnSubmit并调用SubmitChanges
  2. 获取必须写入地址表的数据。调用InsertOnSubmit并调用SubmitChanges
  3. 获取必须写入Car表的数据。调用InsertOnSubmit并调用SubmitChanges
  4. 获取必须写入Job表的数据。调用InsertOnSubmit并调用SubmitChanges
    1. 获取必须写入名称表的数据。
    2. 获取必须写入地址表的数据。
    3. 获取必须写入Car table的数据。
    4. 获取必须写入作业表的数据。
    5. 调用InsertOnSubmit,然后调用SubmitChanges。
      1. 获取必须写入Name表的数据。调用InsertOnSubmit
      2. 获取必须写入地址表的数据。调用InsertOnSubmit
      3. 获取必须写入Car表的数据。调用InsertOnSubmit
      4. 获取必须写入Job表的数据。调用InsertOnSubmit
      5. 致电SubmitChanges
      6. 我已经实施了第一个选项,我相信这不是最佳选择。我不知道我的网络连接是否有问题或其他问题,但有时会写入一些表而其他表没有写入,这使我确信我没有尽可能做到这一点。

        在一些与此问题类似的帖子中,有关于视图和其他选项的注释。我没有这方面的经验,所以我需要一些指导,以便最好地做到这一点以及我应该关注哪个方向。

2 个答案:

答案 0 :(得分:2)

准备第一个表的数据并为表

执行InsertOnSubmit

然后第2,第3,第4表格相同。

然后执行SubmitChanges。

在数据库中,所有行都将被插入(或者如果包含这些操作,则更新或删除)。如果在更新数据库期间出现问题,将删除所有修改(回滚)。因此,数据的完整性是安全的!

程序中变量中的数据不会反映数据库,如果发生回滚,则需要再次访问数据。

第二个变体并不总是运行良好,因为它只包含回滚中的最后一个表。如果表1的插入顺利,没有2失败,3和4顺利,那么你将不会注意到第二次失败。

答案 1 :(得分:1)

首先,您应该只在一切就绪后提交/提交更改,特别是如果更改都属于单个“操作”。否则,有可能(正如您正在经历的那样)某些表可能会更新,而其他表则不会更新,例如,如果在后续提交之前发生错误,或者发生中止。

我会推荐第二个或第三个选项,我自己,这取决于“获取数据”操作的复杂程度,以及它使用了多少内存。如果它相对简单,我会选择第二个选项:预先获取所有数据,然后将其全部添加并一举提交。但老实说,我怀疑它真的很重要,只要你只在整个操作完成并提交时才提交。