Неожиданный сбой модели обновления ASP.NET MVC

Я пытаюсь обновить некоторые свойства объекта, вызывая UpdateModel(myObject, new[] { "stringprop1", "stringprop2", "intprop"}).

Это не удается по неизвестной причине. Некоторые строковые свойства успешно обновляются. Когда я пытаюсь обновить свойство int, это не удается. Новое значение int отправляется из списка выбора html в представлении.

Я могу видеть данные из представления в моем ValueProvider. Ключ соответствует имени свойства объекта, а значение - это то, что я ожидаю от представления (за исключением того, что это строка. Я думал, что UpdateModel может обрабатывать простые преобразования типов.

Когда я вызываю UpdateModel, выдается исключение InvalidOperationException, ТОЛЬКО ЕСЛИ ЗНАЧЕНИЕ СВОЙСТВА ИЗМЕНЯЕТСЯ.

Кроме того, объект является сгенерированным объектом Linq To Sql.

РЕДАКТИРОВАТЬ

Просматривая состояние модели после вызова TryUpdateModel, я вижу это исключение в свойстве, с которым у меня возникли проблемы:

- Exception {"Operation is not valid due to the current state of the object."} System.Exception {System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException}

Значение, которое я пытаюсь обновить, является внешним ключом. Почему я не могу обновить это значение? Спасибо за помощь?

РЕДАКТИРОВАТЬ 2

Я нашел это: http://social.msdn.microsoft.com/Forums/en-US/linqtosql/thread/f9c4a01a-195a-4f2b-a1cb-e2fa06e28b25

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


person Ronnie Overby    schedule 26.08.2009    source источник


Ответы (3)


К черту это. Я просто сделал это по старинке:

myObject.Skunk = db.Skunks.Single(s => s.ID == intprop);
person Ronnie Overby    schedule 26.08.2009

У меня была такая же проблема, и я понял, что это сам DataContext. Я сохранял это в сеансе, а не создавал новый с каждым запросом. Как только я создал контекст для каждого запроса, эта ошибка исчезла.

person Jason Wicker    schedule 22.09.2009
comment
У меня была такая же проблема, как вы описываете, и она была решена путем простого создания экземпляра нового DataContext - хотя я не могу объяснить, почему. Любые идеи? - person Andrew Flanagan; 23.09.2010

Я столкнулся с этой проблемой, когда использовал DataLoadOptions. Достаточно просто установить DLO для столбца с внешним ключом, чтобы вызвать эту ошибку. Я исправил это, создав новый экземпляр DataContext без DLO.

Обратите внимание, что не имело значения, что значение в столбце с внешним ключом было установлено равным нулю в начале обновления.

Надеюсь, это поможет кому-то, у кого есть похожая проблема (этот вопрос был одним из первых результатов, с которыми я столкнулся, когда пытался решить его сам).

person jahu    schedule 24.04.2014