C# ASP.NET:已释放ObjectContext实例
我是实体框架和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
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;
}
}