如何使用实体框架构建基于 3 个表的 JSON
Posted
技术标签:
【中文标题】如何使用实体框架构建基于 3 个表的 JSON【英文标题】:How to build a JSON based on 3 tables using Entity Framework 【发布时间】:2019-08-18 09:41:48 【问题描述】:我试图在 MVC 中使用 JsonResult 方法显示 JSON,我使用的是实体框架,但我的问题是 PostMan 显示服务器错误:
ObjectContext 实例已被释放,不能再用于需要连接的操作。
我正在使用一个涉及 3 个不同表的查询,但是其中一个表可能会检索超过 3 个不同的行。
这是我的代码:
[HttpGet]
[AllowAnonymous]
public JsonResult RetreiveResume(int User)
using (var context = new DexusEntities())
var collection = (from p in context.CND_PersonalData join
pd in context.CND_ProfessionalData on p.UserId equals pd.UserId join
ex in context.CND_ExperiencesData on p.UserId equals ex.UserId select p).ToList();
return Json(collection, JsonRequestBehavior.AllowGet);
我的代码有什么问题?
提前致谢。
【问题讨论】:
你用的是asp mvc核心吗? 查看此链接:***.com/questions/18398356/… 您应该包含表达式返回的主要实体的子集合。像 CND_ExperiencesData.Include("collectionName"),如果您共享您的模型定义,会更容易为您提供帮助。 我不确定。我想我是。 【参考方案1】:使用后移动返回线。您正在尝试返回结果后处理上下文。您可以查看此链接了解更多信息:What happens if i return before the end of using statement? Will the dispose be called?
[HttpGet]
[AllowAnonymous]
public JsonResult RetreiveResume(int User)
var collection = new CND_PersonalData();
using (var context = new DexusEntities())
context.Configuration.LazyLoadingEnabled = false;
collection = (from p in context.CND_PersonalData join
pd in context.CND_ProfessionalData on p.UserId equals pd.UserId join
ex in context.CND_ExperiencesData on p.UserId equals ex.UserId select p).ToList();
return Json(collection, JsonRequestBehavior.AllowGet);
【讨论】:
它说:无法将类型 System.Collections.Generic.Lis请您尝试将 return 放在括号之后,如下所示:
using (var context = new DexusEntities())
var collection = (from p in context.CND_PersonalData join
pd in context.CND_ProfessionalData on p.UserId equals pd.UserId join
ex in context.CND_ExperiencesData on p.UserId equals ex.UserId select p).ToList();
return Json(collection, JsonRequestBehavior.AllowGet);
【讨论】:
以上是关于如何使用实体框架构建基于 3 个表的 JSON的主要内容,如果未能解决你的问题,请参考以下文章