Как правильно сохранить коллекцию в сущность?

У меня есть объект с EntityCollection внутри. Если я просто добавлю новый объект, все будет работать хорошо. Код, который делает это здесь:

Context.ApplyChanges()
Context.SaveChanges()

Но если я попытаюсь обновить объект, у меня появится следующее сообщение:

AcceptChanges не может продолжаться, поскольку значения ключа объекта конфликтуют с другим объектом в ObjectStateManager. Перед вызовом AcceptChanges убедитесь, что значения ключей уникальны.

Даже если использовать одни и те же объекты коллекции. Я имею в виду, что в коллекции не может быть реальных одинаковых объектов сущностей, потому что они сохраняются в базе данных, если они новые. Но! Если я попытаюсь применить один и тот же код к отдельным объектам в коллекции, они будут сохранены, но снова, если я попытаюсь применить его к объекту (контейнеру), у меня возникнет эта ошибка.

Спасибо за помощь


person mimic    schedule 23.03.2011    source источник
comment
Измените свой вопрос и предоставьте некоторый код, показывающий, что вы сделали, когда произошла ошибка. Объясните, как вы извлекали сущности.   -  person Ladislav Mrnka    schedule 23.03.2011


Ответы (2)


Пробовали ли вы получить объект, который хотите изменить, из Context, соответствующим образом изменить этот объект, а затем сохранить изменения? Если да, не могли бы вы привести более подробный пример?

person Andrew    schedule 23.03.2011
comment
Да, я так делаю. Сначала я просто сохраняю объект в базу данных, затем получаю его, изменяю (добавляю объект в коллекцию) и снова пытаюсь сохранить, и на этот раз у меня ничего не получается. - person mimic; 23.03.2011
comment
@Seacat Что вы подразумеваете под добавлением объекта в коллекцию? Это может показаться очевидным, но на самом деле, что вы делаете с объектом? - person Andrew; 23.03.2011
comment
У меня есть объект с коллекцией, это TrackableCollection, я просто добавляю новую сущность и сохраняю объект-контейнер - все сохраняется. Но если я затем добавлю новый объект в коллекцию и попытаюсь сохранить, это не удастся. - person mimic; 23.03.2011
comment
@Seacat Не могли бы вы показать нам еще немного кода, показав, какая часть работает, а какая нет? - person Andrew; 23.03.2011

Я подозреваю, что вы что-то упустили из своей модели или схемы таблицы. Это то, что я ожидал бы, если бы первичный ключ модели должен был быть сгенерирован автоматически, но код вашей таблицы/модели не определяет его таким образом. Тогда у вас будут все первичные ключи для объекта в коллекции, установленные на ноль, и вы получите нарушение первичного ключа при попытке вставить второй объект.

person tvanfosson    schedule 23.03.2011
comment
К сожалению, ключи не генерируются автоматически. Но если это проблема, почему я могу добавить 2 новых объекта в новый объект и сохранить объект, и все будет сохранено, но в то же время, если у меня уже есть этот объект с одним из объектов в коллекции, а затем, если я просто попытаюсь добавить второй (то же, что и в первом случае) я терплю неудачу? - person mimic; 23.03.2011
comment
@Seacat - это было просто предположение, основанное на том, что вы описали. Я интерпретировал то, что вы сказали, как означающее, что если вы добавили только объект, он работал, но если вы добавили объект со связанными объектами, это не сработало. Это заставило меня подумать, что что-то не так с ключами в связанных объектах. Я видел подобные ошибки раньше, когда PK в таблице не был настроен как столбец IDENTITY, поскольку значение по умолчанию для int равно 0 (поэтому оно всегда не равно нулю). - person tvanfosson; 23.03.2011
comment
спасибо, попробую проверить ключи в своих таблицах и потом расскажу о результатах. - person mimic; 23.03.2011
comment
Я решил проблему. Оказалось, что мне нужно было настроить вложенные ссылочные объекты, определяющие только идентификатор, а не сами объекты. И я забыл обновить (применить изменения) новую добавленную сущность. - person mimic; 24.03.2011