Как лучше вставлять или обновлять несколько таблиц одновременно? - PullRequest
1 голос
/ 20 июля 2011

Я прочитал несколько постов, имеющих отношение к моему вопросу, но не думаю, что они отвечают на него так, как я могу понять.Я довольно плохо знаком с Linq для SQL и SQL в целом, поэтому, пожалуйста, оставьте меня без внимания.

Мой вопрос такой.

Если мне нужно обновить или вставить в несколько таблиц с одним "action ", например, вызов для сохранения информации, где есть несколько таблиц, которые включают в себя« Information ».

Для аргументов, допустим, у нас есть следующие таблицы:

Имя Адрес Car Job

и при каждом вызове для сохранения информации каждая из этих таблиц вставляется в.

Что лучше:

  1. Получите данные, которые должны быть записаныНаименование таблицы.Вызовите InsertOnSubmit и вызовите SubmitChanges
  2. Получите данные, которые должны быть записаны в таблицу адресов.Вызовите InsertOnSubmit и вызовите SubmitChanges
  3. Получите данные, которые должны быть записаны в таблицу Car.Вызовите InsertOnSubmit и вызовите SubmitChanges
  4. Получите данные, которые должны быть записаны в таблицу заданий.Вызовите InsertOnSubmit и вызовите SubmitChanges

или

  1. Получите данные, которые должны быть записаны в таблицу имен.
  2. Получите данные, которые должны быть записаны в адрестаблица.
  3. Получить данные, которые должны быть записаны в таблицу Car.
  4. Получить данные, которые должны быть записаны в таблицу заданий.
  5. Вызвать InsertOnSubmit, затем вызвать SubmitChanges.

или

  1. Получите данные, которые должны быть записаны в таблицу имен.Вызов InsertOnSubmit
  2. Получить данные, которые должны быть записаны в адресную таблицу.Вызовите InsertOnSubmit
  3. Получите данные, которые должны быть записаны в таблицу Car.Вызов InsertOnSubmit
  4. Получить данные, которые должны быть записаны в таблицу заданий.Вызов InsertOnSubmit
  5. Вызов SubmitChanges

Я реализовал первый предложенный вариант, и я уверен, что это не лучший способ.Я не знаю, есть ли у меня проблемы с сетевым подключением или чем-то еще, но иногда некоторые таблицы записываются, а другие нет, и это позволяет мне быть уверенным, что я делаю это не лучшим образом.

В некоторых сообщениях, похожих на этот вопрос, есть комментарии, связанные с представлениями и другими параметрами.У меня нет опыта в этом вопросе, поэтому мне нужны некоторые рекомендации относительно того, как лучше всего это сделать и в каком направлении мне следует сосредоточить свое внимание.

Ответы [ 2 ]

2 голосов
/ 20 июля 2011

Подготовьте данные для первой таблицы и выполните InsertOnSubmit для таблицы

, затем то же самое для 2-й, 3-й, 4-й таблицы.

, затем выполните SubmitChanges.

В базу данных будут вставлены все строки (или обновлены или удалены, если вы включите такие операции).Если что-то пойдет не так во время обновлений базы данных, ВСЕ изменения будут удалены (откатаны).Таким образом, целостность данных надежна!

Данные в переменных в вашей программе не будут отражать базу данных. Если произошел откат, вам потребуется снова получить доступ к данным.

Второй вариант не всегда работает хорошо, потому что он будет включать только последнюю таблицу в откате.если вставка таблицы 1 идет хорошо, нет 2 неудачных, № 3 и 4 идут хорошо, то вы НЕ заметите 2-й сбой.

1 голос
/ 20 июля 2011

Прежде всего, вы должны фиксировать / отправлять изменения только после того, как все будет готово, особенно если все изменения относятся к одному «действию». В противном случае возможно, что (как вы, очевидно, испытываете) некоторые таблицы могут обновляться, а другие - нет, если, например, ошибка возникает перед последующей отправкой или происходит прерывание.

Я бы сам порекомендовал второй или третий вариант, в зависимости от сложности операции «получение данных» и объема используемой памяти. Если это относительно просто, я бы выбрал второй вариант: получить все данные заранее, затем добавить все и отправить их одним махом. Однако, если честно, я сомневаюсь, что это действительно имеет значение, если вы отправляете только тогда, когда вся операция завершена и правильна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...