我将一个viewmodel发布到我的控制器,并将其自动化为实体对象,并使用entry()方法将其保留,根据是否要添加或更新来改变它的状态。我确保自动化后对象不为null,也许我坚持错了。我的问题是,嵌套对象不会保留更改。
public ActionResult saveUpdatePessoa(PessoaViewModel id)
{
if (ModelState.IsValid)
{
var pes = MvcApplication.Mapper.Map<PessoaViewModel, Pessoa>(id);
using (var db = new CityManagerDbCtx())
{
db.Entry(pes).State = pes.codigo == 0 ? EntityState.Added : EntityState.Modified;
//db.Entry(pes.endereco).State = pes.endereco.codigo == 0 ? EntityState.Added : EntityState.Modified;//Gives me error here if I uncomment this line
db.SaveChanges();
string smsg = id.codigo > 0 ? "Pessoa editada com sucesso." : "Pessoa salva com sucesso.";
ModelState.Clear();
return Json(new SubmitFormViewModel
{
success = true,
form = RenderHelper.PartialView(this, PESSOA_FORM_VIEW, new PessoaViewModel { dt_cad = DateTime.Now.Date, dt_nasc = DateTime.Now.Date }),
successMessages = new string[] { smsg },
errorMessages = new string[] { }
});
}
}
return Json(new SubmitFormViewModel
{
success = false,
form = RenderHelper.PartialView(this, PESSOA_FORM_VIEW, id),
successMessages = new string[] { },
errorMessages = ModelState.Values.SelectMany(m => m.Errors).Select(e => e.ErrorMessage).ToArray()
});
}
答案 0 :(得分:1)
如果这些“嵌套对象”是类,则需要像“Pessoa”类一样显式更新它们。它不会隐含地知道更新这些嵌套类只是因为更新了包装类。
但是,添加具有嵌套对象的类将添加所有内容。它只对更新有所不同。