如何使用实体框架基于3个表构建JSON

时间:2019-03-27 17:55:48

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

我正在尝试在MVC中使用JsonResult方法显示JSON,正在使用Entity Framework,但是我的问题是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);
        }
    }

我的代码怎么了?

谢谢。

2 个答案:

答案 0 :(得分:0)

使用后移动返回线。您在尝试返回结果后立即处理上下文。您可以检查此链接以获取更多信息: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);
}

答案 1 :(得分:-1)

您能否尝试将返回内容放在方括号内,如下所示:

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