C# ASP.NET MVC UpdateModel意外失败

C# ASP.NET MVC UpdateModel意外失败,c#,.net,asp.net-mvc,linq,linq-to-sql,C#,.net,Asp.net Mvc,Linq,Linq To Sql,我试图通过调用UpdateModelmyObject、new[]{stringprop1、stringprop2、intprop}来更新一些对象属性 这是失败的原因不明。几个字符串属性正在成功更新。当我尝试更新int属性时,它失败了。新的int值是从视图上的html选择列表发送的 我可以从我的ValueProvider中的视图中查看数据。该键与对象的属性名匹配,该值是我从视图中期望的值,只是它是一个字符串。我认为UpdateModel可以处理简单的类型转换 当我调用UpdateModel时,仅当

我试图通过调用UpdateModelmyObject、new[]{stringprop1、stringprop2、intprop}来更新一些对象属性

这是失败的原因不明。几个字符串属性正在成功更新。当我尝试更新int属性时,它失败了。新的int值是从视图上的html选择列表发送的

我可以从我的ValueProvider中的视图中查看数据。该键与对象的属性名匹配,该值是我从视图中期望的值,只是它是一个字符串。我认为UpdateModel可以处理简单的类型转换

当我调用UpdateModel时,仅当属性的值正在更改时,才会引发InvalidOperationException

此外,该对象是Linq到Sql生成的对象

编辑 调用TryUpdateModel后查看模型状态,我在遇到问题的属性上看到此异常:

-由于对象的当前状态,异常{操作无效。}System.Exception{System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException}

我试图更新的值是外键。为什么我不能更新此值?谢谢你的帮助

编辑2 我发现:


我可以发誓我以前更改了密钥而不是关联属性,但不管怎样。在这种MVC模型绑定的情况下可以做些什么?

去他妈的。我只是用老式的方式:

myObject.Skunk = db.Skunks.Single(s => s.ID == intprop);

去他妈的。我只是用老式的方式:

myObject.Skunk = db.Skunks.Single(s => s.ID == intprop);

我遇到了同样的问题,然后意识到这是DataContext本身。我在会话中保存了这个,而不是在每个请求中创建一个新的会话。一旦我为每个请求创建了上下文,这个错误就消失了。

我遇到了同样的问题,然后意识到这是DataContext本身。我在会话中保存了这个,而不是在每个请求中创建一个新的会话。一旦我为每个请求创建了上下文,这个错误就消失了。

我在使用DataLoadOptions时遇到了这个问题。仅为具有外键的列设置DLO就足以导致此错误。我通过创建一个没有DLO的DataContext的新实例来修复它

请注意,在更新开始时,将带有外键的列中的值设置为null没有什么区别


我希望这对有类似问题的人有所帮助。这个问题是我自己解决问题时遇到的第一个结果。

我在使用DataLoadOptions时遇到这个问题。仅为具有外键的列设置DLO就足以导致此错误。我通过创建一个没有DLO的DataContext的新实例来修复它

请注意,在更新开始时,将带有外键的列中的值设置为null没有什么区别


我希望这对有类似问题的人有所帮助。这个问题是我自己尝试解决它时遇到的第一个结果之一。

我遇到了与您描述的相同的问题,并且通过实例化一个新的DataContext解决了这个问题,但我无法解释原因。有什么想法吗?我遇到了与您描述的相同的问题,通过实例化一个新的DataContext就解决了这个问题——但我无法解释原因。有什么想法吗?