【发布时间】:2012-07-14 19:55:00
【问题描述】:
当我更新我的模型时,我在子关系上遇到错误,我也尝试更新。
我的模型,说 Order 与 OrderItem 有关系。在我看来,我有订单的详细信息以及订单项的编辑器模板。当我更新数据时,指向 Order 的链接为空,但 orderid 已填充,因此它应该能够链接它,TryUpdateModel 返回 true,但保存失败:
InvalidOperationException:操作失败:无法更改关系,因为一个或多个外键属性不可为空。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新的关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。]
我的更新方法:
public ActionResult ChangeOrder(Order model)
{
var order = this.orderRepository.GetOrder(model.OrderId);
if (ModelState.IsValid)
{
var success = this.TryUpdateModel(order);
}
this.orderRepository.Save();
return this.View(order);
}
我尝试了我在 SO 和其他来源上看到的所有解决方案,但都没有成功。
我将 .Net MVC 3、EF 4.3.1 与 DBContext 一起使用。
【问题讨论】:
-
一般不要使用
TryUpdateModel,因为它在黑匣子中太多。我通常喜欢手动设置值。尝试在不使用该辅助方法的情况下手动执行操作。 -
您可能需要类似以下的解决方案:stackoverflow.com/a/5540956/270591(使用子集合更新分离的父级)。
TryUpdateModel不会做所有必要的工作来执行正确的更新。 -
能否提供
Order的代码?
标签: asp.net-mvc asp.net-mvc-3 entity-framework