我有一个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为我做那些查找?
答案 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);
}