您好我正在编写一个ASP.Net MVC应用程序,我有一个专门用于数据库连接的特殊类。在我的HomeController中,我调用这个特殊DB类的静态方法,它将所需的数据返回到对象中。我使用实体框架来实现这一目标。但是当我尝试使用Controller中的List时,我遇到了一个奇怪的异常。我认为问题在于我有一个虚拟内部集合,在实体框架方法完成后处理。我可以访问主组字段,但无法访问内部列表。这是我的模特:
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; }
}
当我尝试获取CourseTemplate结果时,我得到了这个例外:
异常详细信息:System.ObjectDisposedException:ObjectContext实例已被释放,不能再用于需要连接的操作。
我试图单独调查它,但我找到的所有内容都是建议返回List而不是查询。这也是我的DBConnection方法的代码:
public static List<Teacher> returnAllTeachers()
{
using (var db = new Context())
{
var query = from th in db.Teachers
select th;
return query.ToList();
}
}
我做错了什么?
答案 0 :(得分:4)
您的原始查询仅加载Teacher
个对象。集合设置为延迟加载,直到您访问它们为止。不幸的是,您的objectcontext已关闭,因此您无法再从数据库中获取任何内容。
最佳解决方法是将查询更新为急切加载您要使用的其他数据:
var query = from th in db.Teachers.Include(t => t.Orders)
select th;
您还必须添加using System.Data.Entity
才能访问带有lambda的Include()
方法。不要使用带弦的那个。