【发布时间】:2014-02-05 18:42:12
【问题描述】:
我无法掌握正确的方法来创建视图模型并使用 Entity Framework 将该信息保存回数据库,而且我似乎无法找到我正在寻找的信息,所以请原谅我忽略了。
我看到了这个帖子here,他似乎也在问同样的问题,但没有得到答案。
我的主要问题是,
出于编辑目的,如果我有一个ProductModel model 与Warranty model 关系,我应该在视图模型中使用virtual property Warranty 还是应该使用int WarrantyId?
如果我应该使用虚拟属性,为什么这段代码不能正确保存Warranty?
我是否需要明确标记或填写保修以进行更新?
请不要这样填充我的编辑视图并按预期选择列表。
我的(简化的)代码设置如下:
型号:
public int ModelId{ get; set; }
public int ModelNumber { get; set; }
public virtual Warranty Warranty { get; set;}
查看模型:
public int ModelId { get; set; }
[Required(ErrorMessage = "Model Number required")]
[StringLength(25, ErrorMessage = "Must be under 25 characters")]
[Display(Name="Model Number")]
public string ModelNumber { get; set; }
//related objects and necesary properties
public virtual Warranty Warranty { get; set; }
public IEnumerable<SelectListItem> WarrantySelectListItems { get; set; }
控制器(GET):
public ActionResult Edit(int? id)
{
//check the id
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
//get the model and make sure the object is populated
var model = _modelService.GetModel(id.Value);
if (model == null)
{
return HttpNotFound();
}
//pass our entity (db) model to our view model
var editModelModel = new EditModelModel();
editModelModel.InjectFrom(model);
//warranty select list
editModelModel.WarrantySelectListItems = WarrantySelectList(editModelModel.Warranty.WarrantyId);
//option multi select list
editModelModel.OptionSelectListItems = OptionSelectList();
return View(editModelModel);
}
控制器(POST)(正在进行中):
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(EditModelModel editModelModel)
{
if (!ModelState.IsValid)
{
return View(editModelModel);
}
var modelEntity = new Model();
modelEntity.InjectFrom(editModelModel);
_modelService.Update(modelEntity);
_unitOfWork.Save();
return RedirectToAction("Index");
}
查看(简化):
<div class="form-group">
@Html.Label("Warranty", new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(x => x.Warranty.WarrantyId, Model.WarrantySelectListItems, "--Select--")
@Html.ValidationMessageFor(model => model.Warranty.WarrantyId)
</div>
</div>
再次,我只想知道设置这些视图模型和模型的正确/最佳方法,以便 EF 尽可能多地完成工作。 我觉得如果我必须创建一个 WarrantyId 字段,我做错了什么,但也许不是这样。
提前致谢。非常感谢任何见解/帮助。
【问题讨论】:
标签: c# asp.net-mvc entity-framework