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();

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

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

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

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


person Darren    schedule 08.09.2010    source источник
comment
А есть ли исключение?   -  person Jonathan    schedule 08.09.2010
comment
Без исключения, это просто не работает. Мне только что пришло в голову, что, возможно, это как-то связано с полями идентификатора, которые автоматически увеличивают поля идентификаторов базы данных, поэтому Linq to SQL не может их различить. На самом деле, пока я только пишу это, держу пари, это потому, что я переопределил равные для сравнения по Id. Я проверю это.   -  person Darren    schedule 08.09.2010


Ответы (1)


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

Спасибо, Джонатан, за то, что он был моим "Резиновой уточкой".

person Darren    schedule 08.09.2010