linq to sql -error, когда вставка на 2 провоцирует родительские дочерние отношения - PullRequest
3 голосов
/ 05 декабря 2010

У меня есть объекты заказа и деталей заказа с OrderID в качестве внешнего ключа в таблице деталей заказа.OrderID - это столбец идентификатора для Order, для которого задано автоматическое создание.

Когда я выполняю вставку следующим образом (жестко закодированные значения для простоты):

LINQ1DataContext db = new LINQ1DataContext();

Order order = new Order();
order.OrdersCustomerID = 1;
order.OrdersDate = time;
db.Orders.InsertOnSubmit(order);

OrdersDetail oDetail = new OrdersDetail();
oDetail.OrdersDetailID = order.OrdersID;
oDetail.OrdersDetailProdID = 1;
oDetail.OrdersDetailQty = 6;
oDetail.OrdersDetailUnitPrice = 2.58m;
db.OrdersDetail.InsertOnSubmit(oDetail); 

db.SubmitChanges();

Это приводит к конфликту сОграничение FOREIGN KEY 'ошибка.Я обнаружил, что это происходит потому, что в InsertOnSubmit (order) не генерируется orderID.Когда после этого выполняется SubmitChanges (), OrdersDetailID не совпадает с OrdersID и выдает ошибку.OrderID будет сгенерирован только после 'submitchanges ()'.

Если добавить дополнительный db.SubmitChanges ();после db.Orders.InsertOnSubmit (order) orderid автоматически генерируется, как я ожидаю, а затем orderDetails вставляет нормально.

Мой вопрос: нормально ли вставлять submitChanges после каждого insertOnSubmit при вставке в 2?таблицы (parent-child), как это?

Я думал, что идея insertOnSubmit заключается в том, что я могу сделать пару вставок в разные таблицы, а LINQ to SQL позаботится обо всех деталях, следующих за SubmitChanges.

спасибо,

Ответы [ 2 ]

3 голосов
/ 05 декабря 2010

Добавление

order.OrdersDetail.Add(oDetail);

до

db.OrdersDetail.InsertOnSubmit(oDetail);  

, казалось, работало и требовало только одного db.SubmitChanges ().Может быть, так можно поступить подобным образом ...

0 голосов
/ 05 декабря 2010
LINQ1DataContext db = new LINQ1DataContext();

Order order = new Order();
order.OrdersCustomerID = 1;
order.OrdersDate = time;
db.Orders.InsertOnSubmit(order);

> db.SubmitChanges();

OrdersDetail oDetail = new OrdersDetail();
oDetail.OrdersDetailID = order.OrdersID;
oDetail.OrdersDetailProdID = 1;
oDetail.OrdersDetailQty = 6;
oDetail.OrdersDetailUnitPrice = 2.58m;
db.OrdersDetail.InsertOnSubmit(oDetail); 

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