C# 尝试从列表接收数据时发生System.ObjectDisposedException
您好,我正在编写一个ASP.NETMVC应用程序,我有一个专门用于数据库连接的特殊类。在我的HomeController中,我调用这个特殊DB类的静态方法,将所需的数据返回到对象中。我使用实体框架来实现这一点。然而,当我试图从我的控制器使用列表时,我遇到了一个奇怪的异常。我认为问题在于我有一个虚拟的内部集合,在实体框架方法完成后处理。我可以访问主组字段,但无法访问内部列表。这是我的模型:C# 尝试从列表接收数据时发生System.ObjectDisposedException,c#,.net,linq,entity-framework,C#,.net,Linq,Entity Framework,您好,我正在编写一个ASP.NETMVC应用程序,我有一个专门用于数据库连接的特殊类。在我的HomeController中,我调用这个特殊DB类的静态方法,将所需的数据返回到对象中。我使用实体框架来实现这一点。然而,当我试图从我的控制器使用列表时,我遇到了一个奇怪的异常。我认为问题在于我有一个虚拟的内部集合,在实体框架方法完成后处理。我可以访问主组字段,但无法访问内部列表。这是我的模型: public partial class Teacher { public Teacher()
public partial class Teacher
{
public Teacher()
{
this.TeacherRelationships = new List<TeacherRelationship>();
this.CourseTemplates = new List<CourseTemplate>();
this.Orders = new List<Order>();
}
public int ID { get; set; }
public string Name { get; set; }
public string DescriptionText { get; set; }
public Nullable<int> Phone { get; set; }
public string Email { get; set; }
public string PictureFilePath { get; set; }
public virtual ICollection<TeacherRelationship> TeacherRelationships { get; set; }
public virtual ICollection<CourseTemplate> CourseTemplates { get; set; }
public virtual ICollection<Order> Orders { get; set; }
}
公共部分班级教师
{
公共教师()
{
this.TeacherRelationships=新列表();
this.CourseTemplates=新列表();
this.Orders=新列表();
}
公共int ID{get;set;}
公共字符串名称{get;set;}
公共字符串DescriptionText{get;set;}
公共可空电话{get;set;}
公共字符串电子邮件{get;set;}
公共字符串PictureFilePath{get;set;}
公共虚拟ICollection教师关系{get;set;}
公共虚拟ICollection课程模板{get;set;}
公共虚拟ICollection订单{get;set;}
}
当我尝试获取CourseTemplate结果时,我得到以下异常:
异常详细信息:System.ObjectDisposedException:ObjectContext实例已被释放,无法再用于需要连接的操作
我试图单独进行调查,但我发现的一切都是返回列表而不是查询的建议。下面是我的DBConnection方法的代码:
public static List<Teacher> returnAllTeachers()
{
using (var db = new Context())
{
var query = from th in db.Teachers
select th;
return query.ToList();
}
}
public静态列表returnAllTeachers()
{
使用(var db=new Context())
{
var query=来自数据库中的th
选择th;
返回query.ToList();
}
}
我做错了什么?您最初的查询只加载
教师
对象。集合被设置为延迟加载,在您访问它们之前不会被提取。不幸的是,此时objectcontext已关闭,因此无法再从数据库中获取任何内容
最佳修复方法是更新查询以加载要使用的其他数据:
var query = from th in db.Teachers.Include(t => t.Orders)
select th;
您还必须使用System.Data.Entity添加
,以访问接受lambda的Include()
方法。不要使用带字符串的查询。原始查询仅加载教师对象。集合被设置为延迟加载,在您访问它们之前不会被提取。不幸的是,此时objectcontext已关闭,因此无法再从数据库中获取任何内容
最佳修复方法是更新查询以加载要使用的其他数据:
var query = from th in db.Teachers.Include(t => t.Orders)
select th;
您还必须使用System.Data.Entity添加,以访问接受lambda的Include()
方法。不要使用带字符串的选项。谢谢您的回答。这个代码修复了我的问题。我将在2分钟内接受答案:)var query=from th in db.Teachers.Include(th=>th.CourseTemplates)选择th代码>谢谢你的回答。这个代码修复了我的问题。我将在2分钟内接受答案:)var query=from th in db.Teachers.Include(th=>th.CourseTemplates)选择th代码>