2011-05-19 60 views
1

我有Quiz.Component.Product.Type和一个提供组件的视图。当创建回传被调用时,由于该视图包含一个Component_Id字段,模型联编程序会为我创建一个Quiz.Component,并将.Id设置为正确的值;所有其他字段保留为空,因此产品也是如此,这意味着当我和.SaveChanges()它抱怨组件参与关系(与产品)并且产品是预期的。保存EF中的更改

,这意味着我必须做的:

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

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

回答

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); 
} 
+0

HEH。我只是懒惰 – ekkis 2011-05-19 17:57:10