Asp.net mvc UpdateModel()无法将新值分配给导航属性(实体引用)

Asp.net mvc UpdateModel()无法将新值分配给导航属性(实体引用),asp.net-mvc,asp.net-mvc-2,Asp.net Mvc,Asp.net Mvc 2,这发生在ASP.NETMVC2、.NET4EF4中。“我的地址”实体具有对Post引用的引用。Zip是Post实体的主键。Post实体中的另一个属性是CityName。在我的视图中,我允许用户更改地址的CityName,该地址会通过jquery自动加载相应的Zip并将其存储在隐藏字段中 发布时,这两个值都会被精细地发布,并绑定到地址的Post引用。但是UpdateModel无法更新它们。它表示Zip是实体的实体键的一部分,不能更改 我很乐意通过新的Zip加载Post实体,并手动将其分配到现有地址

这发生在ASP.NETMVC2、.NET4EF4中。“我的地址”实体具有对Post引用的引用。Zip是Post实体的主键。Post实体中的另一个属性是CityName。在我的视图中,我允许用户更改地址的CityName,该地址会通过jquery自动加载相应的Zip并将其存储在隐藏字段中

发布时,这两个值都会被精细地发布,并绑定到地址的Post引用。但是UpdateModel无法更新它们。它表示Zip是实体的实体键的一部分,不能更改

我很乐意通过新的Zip加载Post实体,并手动将其分配到现有地址,但对于所有其他属性,我希望依赖UpdateModel


我怎样才能做到这一点?有人会认为在EF4中,这样的问题已经解决了。

默认情况下,实体框架生成的类对更改主键值设置了限制。这很好。你不应该以任何理由改变PK。在add场景之外更改PKs会对状态跟踪和系统的总体运行状况产生相当大的影响

要解决此问题,您需要告诉UpdateModel不要使用exclude参数更新主键