2014-09-11 61 views
1

看来实体框架在插入新记录后并未从数据库中获取最后一项。而是附加用于插入的对象作为结果集的最后一项。因此,最后一项缺少其他项目所具有的所有相关(外键对象)信息。实体在插入和丢失子元素后未更新

什么,我试图做的是做一个插入和整个表传递给由Ajax的post请求

我的代码在控制器....

public ActionResult save(MOH_area moh) 
    { 
     if (ModelState.IsValid) 
     { 
      db.moh_area.Add(moh); 
      db.SaveChanges(); 
     } 


     List<MOH_area> mohlist = db.moh_area.Where(x => x.moh_stt == 0).ToList(); 
     return PartialView("data_grid",mohlist); 
    } 
+0

看起来好像您可能正在使用共享上下文......如果不这样做,它可能会导致多个奇怪的问题......您应该使用dbcontext的工作单元或存储库模式。 – 2014-09-11 09:53:19

回答

3

制作烧制的局部视图确定您的“moh”对象没有为ID字段设置的值。理想情况下,我会建议创建MOH_area的新对象并复制除身份之外的值。这应该解决问题,因为我以前使用过这个解决方案。

或者,您可以处理“db”上下文,然后重新加载相同的内容。它可能适合你。

+0

配置和重新创建数据库上下文解决了这个问题。非常感谢。 但您的第一个解决方案没有按预期工作。我创建了一个新对象,并按照建议传递了值,但结果相同。用于插入的对象包含主键的空值。那么问题是什么? – 2014-09-11 10:08:14

+0

奇怪,但很高兴看到解决方案的工作。只需检查定义的关系。如果他们是正确的,第一个应该工作。 :) – 2014-09-11 10:10:00

+0

是的。奇怪。它仍然添加新创建的对象作为最后一个。并且最后一项在自动递增值插入后立即获得标识字段。 只是说,如果我在从数据库获取数据之前更改了新创建对象的某些属性,但是在db.savechanges()之后,则最后一项具有更改的值,而db保存了以前的值。 反正目前与您的第二个选项。感谢那。但只是考虑其他方法也... – 2014-09-11 15:32:33