让我们先来看一下代码块;
发送json数据的控制器功能
[HttpGet]
public ActionResult LoadCourseForDataTable()
{
using (var dd = new DBContext())
{
var data = dd.Courses.ToList();
return Json(new {data = data}, JsonRequestBehavior.AllowGet);
}
}
此块用于从上面的代码块中获取json数据;
<script>
$(document).ready(function () {
$('#CourseTable').DataTable({
"ajax": {
"url": "/Course/LoadCourseForDataTable",
"type": "GET",
"datatype": "json",
},
"columns": [
{ "data": "CourseID", "autoWidth": true },
{ "data": "Title", "autoWidth": true },
{ "data": "Credits", "autoWidth": true },
{ "data": "DepartmentID", "autoWidth": true },
]
});
});
</script>
必须在客户端服务器上加载的所有库完全正确地完成并加载。它们在这个问题上没有问题。
服务器响应 500内部错误
以下是详细的例外情况;
ObjectContext实例已被释放,不能再用于需要连接的操作。
我认为一切都是真的但我有这个问题很有意思。你能帮助我吗?谢谢 。 。
答案 0 :(得分:0)
这很可能是因为您启用了延迟加载。在处理DBContext时,您将关闭与数据库的连接,以便在关闭using语句后无法加载任何相关实体。
事情是,在传递方法的结果之前运行using语句中的dispose。当JsonResult尝试序列化您的课程时,他们会看到有一个Lazy Loaded属性并尝试加载它。但此时与数据库的连接已关闭。
我严格反对网络方案中的延迟加载。出于这个原因和许多其他人。因此,我将给你的唯一建议是禁用延迟加载,如果你想包含相关的实体,你应该热切地获取它们。