0

我的存储库类中有以下方法,用于检索Session对象和关联的对象Medicine object(通过使用 定义 Eager 加载.Include),如下所示:-

public Session GetSession(int id)
        {
            return entities.Sessions.Include(d => d.Medicine).FirstOrDefault(d => d.SessionID == id);

        }

我调用上述存储库方法的操作方法如下所示:-

[HttpPost]
        public ActionResult Delete(int id)
        {

            try
            {
                //string desc;
                var s = repository.GetSession(id);

                repository.DeleteSession(s);

                repository.Save();
                return Json(new { IsSuccess = "True", id = s.SessionID, description = s.Medicine.Name }, JsonRequestBehavior.AllowGet);
            }
            catch (ArgumentNullException)
//code goes here

我面临的问题是,在使用物理删除对象后 repository.Save();,我将无法Medicine navigation property从内存中访问,并且将引发以下异常NullReferenceException 未被用户代码处理description = s.Medicine.Name,而我可以访问s.SessionID可用的即使在删除对象之后在内存中,这是否意味着Session被删除的对象没有Include(没有急切加载)Medicine导航属性!!!?BR

4

1 回答 1

1

如果删除与另一个实体有关系的实体,Entity Framework 将同时删除这些对象之间的关系。您可以通过在删除实体之前为 Json 结果创建对象来解决问题:

var s = repository.GetSession(id);

var result = new { IsSuccess = "True", id = s.SessionID,
                   description = s.Medicine.Name };

repository.DeleteSession(s);
repository.Save();

return Json(result, JsonRequestBehavior.AllowGet);

如果数据库中没有从会话到 Medicine 的引用,这当然无济于事,因为Include不会返回相关对象。您必须单独处理这种情况(只有在不需要关系时才有可能)。

于 2012-04-30T22:42:34.417 回答