2009-11-18 3 views
1

Я некоторое время боролся с этим. Я пытаюсь реализовать много к одной ассоциации. У меня есть группа строк в таблице, называемая показаниями. Они накапливаются со временем, и время от времени я хочу их экспортировать. Когда я их экспортирую, я хочу создать новый объект ExportEvent, чтобы отслеживать, какие строки были экспортированы, поэтому при необходимости они могут быть реэкспортированы. Поэтому Чтение имеет отношение NULL с внешним ключом с ExportEvent, поскольку я создаю показания перед их экспортом.LINQ to SQL - получить объект, изменить, SubmitChanges() создает новые объекты

Что я вывод, что когда я затем сделать экспорт, первый ли я создать ExportEvent (ЭВТ) и добавьте показания с помощью

evt.Readings.AddRange(), 

или если я использую

foreach(reading) 
reading.ExportEvent = evt 

Когда я вызываю SubmitChanges, я всегда получаю новую кучу чтений, созданных с помощью ассоциации evt, и исходные записи не обновляются.

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

+0

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

ответ

0

Я подозреваю, что это потому, что вы звоните AddRange(). Это добавит новые объекты в контекст данных. Вместо этого вы должны попытаться просто привязать существующие объекты, позвонив по адресу Attach() в свой контекст данных.

(Или, если вы никогда не отделяли их и до сих пор исходный контекст данных, вам не нужно ничего делать, просто внести изменения в объекты и вызвать SubmitChanges())

3

Хммм. Интересно - просто щелкнул по этой ссылке в своих записях и обнаружил, что вопрос был воскрешен, поэтому предоставит (неловкое) решение. Все мои объекты имеют свойства данных аудита на них - CreatedDate и UpdDate. Поэтому я реализовал частичные методы для вставки и обновления каждого объекта в datacontext. Я скопировал и вставил (как часто это является причиной некоторого падения) некоторые из этих методов вставки и обновления для вновь созданных объектов. В результате я также скопировал ошибку, где методы Update [blah] вызывали ExecuteDynamicInsert вместо ExecuteDynamicUpdate.

Достаточно сказать, что я был очень расстроен, когда в течение 3 часов я пытался отчаянно пытаться решить эту проблему, только чтобы найти ее из-за (глупой) ошибки копирования/вставки - и только для того, чтобы найти ошибку около 3 минут после того, как я разместил этот вопрос!

Надеюсь, это поможет кому-то.

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