簡體   English   中英

嘗試從List接收數據時System.ObjectDisposedException

[英]System.ObjectDisposedException when trying to receive the data from a List

您好我正在編寫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();
        }
    }

我究竟做錯了什么?

您的原始查詢僅加載Teacher對象。 集合設置為延遲加載,直到您訪問它們為止。 不幸的是,您的objectcontext已關閉,因此您無法再從數據庫中獲取任何內容。

最好的解決方法是更新查詢以急切加載您要使用的其他數據:

var query = from th in db.Teachers.Include(t => t.Orders)
            select th;

您還必須添加一個using System.Data.Entity來訪問帶有lambda的Include()方法。 不要使用帶弦的那個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM