2013-02-03 38 views
6

Tôi gặp sự cố khi truy cập đối tượng liên kết từ LINQ đến sql. Tôi có Bài viết và Người dùng. Mỗi Điều có một người bán (là một Người dùng) và mỗi người dùng có nhiều Bài viết. Tôi giải quyết điều đó với một hiệp hội."Không thể truy cập đối tượng được xử lý"

Đây là cách LINQ của tôi đến các lớp học sql trông giống như: linq to sql classes

Và đây là hiệp hội:

association

Đây là mã đằng sau Article.Seller:

[global::System.Data.Linq.Mapping.AssociationAttribute(Name="User_Article", Storage="_Seller", ThisKey="SellerID", OtherKey="ID", IsForeignKey=true)] 
public User Seller 
{ 
    get 
    { 
     return this._Seller.Entity; 
    } 
    set 
    { 
        ... 
    } 
} 

Bây giờ, khi tôi muốn lấy Người bán của một Điều, tôi nhận được lỗi sau:

Cannot access a disposed object. Object name: 'DataContext accessed after Dispose.'.

Lỗi xảy ra khi nhận được người bán.

Bất kỳ ý tưởng nào về cách xử lý vấn đề này?

EDIT: Heres' mã nơi DataContext được sử dụng:

public static List<Article> Read() 
{ 
    using (uDataContext dbx = new uDataContext()) 
    { 
     return dbx.Article.ToList(); 
    } 
} 

Danh sách này được sử dụng như sau:

List<Article> articles = ArticleDALC.Read(); 

foreach (Article article in articles) 
{ 
    // Exception appears here! 
    User seller = article.Seller; 
    .... 
} 
+2

Đó là vì bối cảnh mà từ đó các dữ liệu đến từ được xử lý. Bạn sẽ cần hiển thị mã nhận được. – spender

+0

Cảm ơn các ý kiến, tôi đã thêm mã mà nhận được! – Nagelfar

Trả lời

14

Giải pháp phát hiện:

Đơn giản chỉ cần thiết lập các DeferredLoadingEnabled tài sản trên sai khi sử dụng DataContext:

public static List<Article> Read() 
{ 
    using (uDataContext dbx = new uDataContext()) 
    { 
     dbx.DeferredLoadingEnabled = false; 
     return dbx.Article.ToList(); 
    } 
} 
4

Đừng vứt bỏ DataContext của bạn.

Tất cả các đối tượng LINQ được liên kết với một DataContext. Có thể bạn đang truy cập đối tượng bên ngoài khối using nơi DataContext được tạo.

Các vấn đề liên quan