我正在尝试通过调用UpdateModel(myObject, new[] { "stringprop1", "stringprop2", "intprop"})
更新一些对象属性。
这是因为一个未知的原因而失败的。几个字符串属性正在成功更新。当我尝试更新int属性时,它失败了。新的int值是从视图上的html选择列表发送的。
我可以在ValueProvider中查看视图中的数据。键匹配对象的属性名称,值是我期望从视图中看到的(除了它是一个字符串。我认为UpdateModel可以处理简单的类型转换。
当我调用UpdateModel时,只会抛出InvalidOperationException,只要该属性的值正在变化。
此外,该对象是Linq To Sql生成的对象。
在调用TryUpdateModel之后查看Model State,我在属性上看到了这个例外我遇到了问题:
- Exception {"Operation is not valid due to the current state of the object."} System.Exception {System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException}
我想要更新的值是外键。为什么我不能更新这个值?谢谢你的帮助吗?
我发现了这个: http://social.msdn.microsoft.com/Forums/en-US/linqtosql/thread/f9c4a01a-195a-4f2b-a1cb-e2fa06e28b25
我本可以发誓我之前更改了密钥而不是关联属性,但无论如何。在这个MVC模型绑定情况下可以做些什么?
答案 0 :(得分:3)
拧紧它。我只是用老式的方式做到了:
myObject.Skunk = db.Skunks.Single(s => s.ID == intprop);
答案 1 :(得分:2)
我有同样的问题然后意识到它是DataContext本身。我在会话中保存了这个,而不是为每个请求创建一个新的。一旦我为每个请求创建了Context,这个错误就消失了。
答案 2 :(得分:0)
我在使用DataLoadOptions时遇到了这个问题。只需使用外键为列设置DLO就足以导致此错误。我通过在没有DLO的情况下创建一个新的DataContext实例来修复它。
请注意,在更新开始时,使用外键的列中的值设置为null没有区别。
我希望这可以帮助有类似问题的人(这个问题是我在尝试自己解决问题时遇到的第一个结果之一)。