Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 尝试从列表接收数据时发生System.ObjectDisposedException_C#_.net_Linq_Entity Framework - Fatal编程技术网

C# 尝试从列表接收数据时发生System.ObjectDisposedException

C# 尝试从列表接收数据时发生System.ObjectDisposedException,c#,.net,linq,entity-framework,C#,.net,Linq,Entity Framework,您好,我正在编写一个ASP.NETMVC应用程序,我有一个专门用于数据库连接的特殊类。在我的HomeController中,我调用这个特殊DB类的静态方法,将所需的数据返回到对象中。我使用实体框架来实现这一点。然而,当我试图从我的控制器使用列表时,我遇到了一个奇怪的异常。我认为问题在于我有一个虚拟的内部集合,在实体框架方法完成后处理。我可以访问主组字段,但无法访问内部列表。这是我的模型: public partial class Teacher { public Teacher()

您好,我正在编写一个ASP.NETMVC应用程序,我有一个专门用于数据库连接的特殊类。在我的HomeController中,我调用这个特殊DB类的静态方法,将所需的数据返回到对象中。我使用实体框架来实现这一点。然而,当我试图从我的控制器使用列表时,我遇到了一个奇怪的异常。我认为问题在于我有一个虚拟的内部集合,在实体框架方法完成后处理。我可以访问主组字段,但无法访问内部列表。这是我的模型:

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