ASP.NET MVC UpdateModel неожиданно завершает работу - PullRequest
1 голос
/ 26 августа 2009

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

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

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

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

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

EDIT

Просматривая состояние модели после вызова 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?

Ответы [ 3 ]

3 голосов
/ 26 августа 2009

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

myObject.Skunk = db.Skunks.Single(s => s.ID == intprop);
2 голосов
/ 22 сентября 2009

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

0 голосов
/ 24 апреля 2014

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...