实体框架保存本机类型属性,但不保存嵌套对象

时间:2016-02-17 00:42:01

标签: c# asp.net-mvc entity-framework

我将一个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()
        });
    }

1 个答案:

答案 0 :(得分:1)

如果这些“嵌套对象”是类,则需要像“Pessoa”类一样显式更新它们。它不会隐含地知道更新这些嵌套类只是因为更新了包装类。

但是,添加具有嵌套对象的类将添加所有内容。它只对更新有所不同。