C# ASP.NET:已释放ObjectContext实例

C# ASP.NET:已释放ObjectContext实例,c#,html,asp.net-mvc,entity-framework,C#,Html,Asp.net Mvc,Entity Framework,我是实体框架和ASP.NET方面的新手。我正在尝试访问导航属性的属性。但我面临“ObjectContext实例已被释放”错误。然后我在谷歌上搜索了一下,发现它可以通过data=db.tblCourses.Include(c=>c.tblSection.ToList()修复但我仍然面临这个问题。 型号: 使用System.Data.Entity; 公共列表editedCoursesView() { 列出数据; 使用(enrolmentsystemEntities db=new enrolments

我是实体框架和ASP.NET方面的新手。我正在尝试访问导航属性的属性。但我面临“ObjectContext实例已被释放”错误。然后我在谷歌上搜索了一下,发现它可以通过
data=db.tblCourses.Include(c=>c.tblSection.ToList()修复但我仍然面临这个问题。
型号:

使用System.Data.Entity;
公共列表editedCoursesView()
{
列出数据;
使用(enrolmentsystemEntities db=new enrolmentsystemEntities())
{
data=db.tblCourses.ToList();
data=db.tblCourses.Include(c=>c.tblSection.ToList();
返回数据;
}
}
TBL课程:

namespace enrolmentSystem.Models
{
    using System;
    using System.Collections.Generic;

    public partial class tblCourse
    {
        public tblCourse()
        {
            this.tblenrolments = new HashSet<tblenrolment>();
        }

        public int CourseId { get; set; }
        public string CourseName { get; set; }
        public int departmentID { get; set; }
        public int TeacherId { get; set; }
        public int CreditHours { get; set; }
        public int SectionId { get; set; }

        public virtual tbldepartment tbldepartment { get; set; }
        public virtual tblteacher tblteacher { get; set; }
        public virtual ICollection<tblenrolment> tblenrolments { get; set; }
        public virtual tblSection tblSection { get; set; }
    }
}
namespace enrolmentSystem.Models
{
使用制度;
使用System.Collections.Generic;
公共部分课程
{
公共TBL课程()
{
this.tblenrolements=new HashSet();
}
public int CourseId{get;set;}
公共字符串CourseName{get;set;}
public int departmentID{get;set;}
public int TeacherId{get;set;}
public int CreditHours{get;set;}
public int SectionId{get;set;}
公共虚拟tbldepartment tbldepartment{get;set;}
公共虚拟TBLTacher TBLTacher{get;set;}
公共虚拟ICollection tblenrolements{get;set;}
公共虚拟tblSection tblSection{get;set;}
}
}
TBL房间:

    namespace enrolmentSystem.Models
{
    using System;
    using System.Collections.Generic;

    public partial class tblRoom
    {
        public tblRoom()
        {
            this.tblSections = new HashSet<tblSection>();
        }

        public int RoomNo { get; set; }
        public string Block { get; set; }
        public int Capacity { get; set; }

        public virtual ICollection<tblSection> tblSections { get; set; }
    }
}
namespace enrolmentSystem.Models
{
使用制度;
使用System.Collections.Generic;
公共部分类tblRoom
{
公共tblRoom()
{
this.tblSections=new HashSet();
}
public int RoomNo{get;set;}
公共字符串块{get;set;}
公共整数容量{get;set;}
公共虚拟ICollection tblSections{get;set;}
}
}
控制器:

[HttpGet]
public ActionResult editCourse()
{
    course c = new course();
    List<tblCourse> data = c.editedCoursesView();
    return View("editCourse", data);    
}
[HttpGet]
公共行动结果编辑课程()
{
课程c=新课程();
列表数据=c.editedCoursesView();
返回视图(“编辑课程”,数据);
}
视图:

@model List<enrolmentSystem.Models.tblCourse>
@{
    ViewBag.Title = "editCourse";

}

<h2>Edit Course</h2>
<table border="1">
    <tr style="text-align:center;">
        <td>Course ID</td>
        <td>Course Name</td>
        <td> Course Department ID</td>
        <td> Course Teacher ID</td>
        <td> Course CreditHours</td>
        <td> Course StartTime</td>
        <td> Course EndTime</td>
        <td> MaxCapacity </td>
        <td> Course RoomNo </td>


    </tr>
    @if (Model != null)
    {

        foreach (var i in Model)
        {
            <form action="~/Enrolment/editCourse" method="post">
                <tr>


                    <td>@i.CourseId <input name="id" type="hidden" value="@i.CourseId" /> </td>
                    <td><input type="text" name="name" value="@i.CourseName" required /></td>
                    <td><input type="number" name="dpId" value="@i.departmentID" required /></td>
                    <td><input type="number" name="teacherId" value="@i.TeacherId" required /></td>


                    <td><input type="number" name="creditHours" value="@i.CreditHours" required /></td>
                    <td><input type="text" name="startTime" value="@i.tblSection.startTime" required /></td>
                    <td><input type="text" name="endTime" value="@i.tblSection.endTime" required /></td>
                    <td><input type="number" name="capacity" value="@i.tblSection.tblRoom.Capacity" required /></td>
                    <td><input type="number" name="roomNo" value="@i.tblSection.RoomNo" required /></td>
                    <td>  <input type="submit" value="Update Course" /> </td>


                </tr>
            </form>
        }
    }
</table>
@型号列表
@{
ViewBag.Title=“editCourse”;
}
编辑课程
课程ID
课程名称
课程部门ID
课程教师ID
课程学分小时数
课程开始时间
课程结束时间
最大容量
课程号
@如果(型号!=null)
{
foreach(模型中的var i)
{
@i、 CourseId
}
}

tblRoom
可能会导致问题,因为它未包含在视图中,但在视图中被引用。通常,此错误意味着您试图延迟加载某些属性,但上下文已被释放

使用
.Include(x=>x.ApplicationsWithOverrideGroup.NestedProp)
.Include(x=>x.Collection.Select(y=>y.Property))
包含嵌套属性或集合

在您的情况下,请使用:

public List<tblCourse> editedCoursesView()
{
    List<tblCourse> data;
    using (enrolmentsystemEntities db = new enrolmentsystemEntities())
    {
        data = db.tblCourses
          .Include(c => c.tblSection)
          .Include(c => c.tblSection.tblRoom)
          .ToList();
        return data;
    }
}
公共列表editedCoursesView()
{
列出数据;
使用(enrolmentsystemEntities db=new enrolmentsystemEntities())
{
数据=db.tbl课程
.Include(c=>c.tblSection)
.Include(c=>c.tblSection.tblRoom)
.ToList();
返回数据;
}
}

在第二个选项中,是否有集合意味着表和该表的属性意味着字段?当您的模型中有简单权限时,请使用
Include(x=>x.foo.bar)
Include(x=>x.foo.select(y=>y.bar))
foo
是对象的集合时,例如
列表
,并且这些对象中的每一个都有您也想加载的
条形图
属性。很抱歉,您可以从我的代码中给出一些示例。我试过,但它给出了错误。什么样的错误,编译错误或上下文处理的异常?列出数据;data=db.tblCourses.Include(x=>x.tblsection.select(y=>y.section));它正确吗?为什么要在
editedCoursesView()
方法中执行两次
ToList()
public List<tblCourse> editedCoursesView()
{
    List<tblCourse> data;
    using (enrolmentsystemEntities db = new enrolmentsystemEntities())
    {
        data = db.tblCourses
          .Include(c => c.tblSection)
          .Include(c => c.tblSection.tblRoom)
          .ToList();
        return data;
    }
}