保存EF中的更改

时间:2011-05-19 17:25:44

标签: entity-framework asp.net-mvc-3 controller postback

我有一个Quiz.Component.Product.Type和一个提供该组件的视图。当调用Create回发时,因为视图包含Component_Id字段,模型绑定器会为我创建Quiz.Component并将.Id设置为正确的值;所有其他字段保持为null,因此Product也是如此,这意味着当我.Add()并尝试.SaveChanges()时,它会抱怨组件参与关系(与产品)并且产品是预期的。< / p>

这意味着我必须这样做:

[HttpPost] ActionResult Create(Quiz q)
{
    q.Product = db.Components.Where(x => x.Id == q.Component.Id).Product;
    ...
}

这可能要求太多但是,有没有办法让EF为我做那些查找?

1 个答案:

答案 0 :(得分:2)

这太过分了。这是可以使用的一种策略。在POST操作中,使用id获取相应的模型,然后使用TryUpdateModel更新属性,最后调用SaveChanges。

这是一种常用的范例:

[HttpPost]
public ActionResult Edit(int id)
{
    var model = db.SomeModel.Single(x => x.ID == id);
    if (TryUpdateModel(model))
    {
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    return View(model);
}