2010-09-08 4 views
0

У меня проблема с Linq to SQL InsertOnSubmit, которая, похоже, работает только для первого элемента в таблице.Linq to SQL InsertOnSubmit для нескольких объектов

Например следующим:

var noteDetail1 = new NoteDetail() { Title = "Test Note Title 1", NoteText = "Test note" }; 
var waiverDetail1 = new WaiverDetail() { Title = "Test Waiver Title 1", NoteText = "Test waiver details text" }; 
var riskDetail1 = new RiskDetail() { Title = "Test Risk Title 1", NoteText = "Test risk details text" }; 
context.Notes.InsertOnSubmit(noteDetail1); 
context.Notes.InsertOnSubmit(riskDetail1); 
context.Notes.InsertOnSubmit(waiverDetail1); 
context.SubmitChanges(); 

Я только получить первый объект («Test Примечание Заголовок 1»), вставленный в базу данных. Если я поместил SubmitChanges после каждого InsertOnSubmit, все строки будут успешно вставлены.

Вышеупомянутые типы наследуются от класса Note, поэтому вставляются в одну и ту же таблицу.

Я, однако, испытываю ту же проблему с не производными классами.

Я долгое время смотрел на это, но не могу найти то, что я сделал неправильно. Вся идея InsertOnSubmit/SubmitChanges заключается в том, что вы можете делать несколько изменений, поэтому должно быть что-то простое, что мне не хватает.

+0

И вы получаете какое-либо исключение? – Jonathan

+0

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

ответ

0

Проблема заключалась в том, что я переопределил Equals в классах сущностей, чтобы объекты с одинаковым идентификатором считались одинаковыми. Очевидно, что Linq to SQL использует это в какой-то момент и получает результат, равный всем новым сущностям (поскольку все они имеют идентификатор 0).

Спасибо Jonathan за то, что он мой "Rubber Duck".

Смежные вопросы