Ошибка при вставке в SQL Server через System.Data.Linq.DataContext - PullRequest
1 голос
/ 19 декабря 2011

У меня есть большая группа вставок, которые я делаю через DataContext в транзакции.Я вставил два типа объектов: A и B.

Я выполняю много SQL-вставок, таких как:

INSERT INTO A (...) VALUES ('11111111-1111-1111-1111-111111111111',..)
INSERT INTO B (...) VALUES (
   '21111111-1111-1111-1111-111111111111', 
   '11111111-1111-1111-1111-111111111111',...) 

отдельно в

db.ExecuteCommand(sql.ToString(), processedParams.ToArray());

таблица B имеет внешний ключдо A.

Иногда я получаю сообщение об ошибке: нарушение ограничения FOREIGN KEY "FK_B_A" в таблице "A".Столбец «GUID».

Иногда все записи успешно вставляются в БД.Связка данных всегда одинакова, за исключением динамически генерируемых идентификаторов GUID.

Похоже, что вставка в B иногда происходит до вставки в A.

Ответы [ 2 ]

4 голосов
/ 19 декабря 2011

Заказ может быть заменен каким-либо образом.

Я рекомендую вам сначала сделать все inserts в table A и только после этого делать inserts на table B.


Кроме того, похоже, что вставленные вами записи неверны.

См. здесь для примеров.

1 голос
/ 20 декабря 2011

Спасибо всем за помощь.

Это был побочный эффект ошибки в процессе очистки транзакций в моем сервисе. Это откат любой длинной очень длинной транзакции. Ошибка возникает, когда происходит очистка между вставкой в ​​таблицу A и таблицу B, поскольку запись в A больше не существует.

...