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

本文关键字:保存 嵌套 对象 属性 框架 本机 类型 实体 | 更新日期: 2023-09-27 18:34:50

我将视图模型发布到我的控制器,并将其自动映射到实体对象,并使用 entry(( 方法保留它,根据它是添加还是更新来更改它的状态。我确保在自动映射后对象不为空,也许我坚持错误。我的问题是 中的嵌套对象不会保留更改。

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()
        });
    }

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

如果这些"嵌套对象"是类,则需要像"Pessoa"类一样显式更新它们。 它不会仅仅因为包装类已更新而隐式知道更新这些嵌套类。

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