2013-02-03 81 views
6

Bir ilişkilendirme nesnesine linq'den sql'ye erişirken sorun yaşıyorum. Sınıfım ve Kullanıcı var. Her bir Madde bir satıcıya (Kullanıcıdır) sahiptir ve her kullanıcının birçok makalesi vardır. Bunu bir dernekle çözdüm."Atılan bir nesneye erişilemiyor"

Bu gibi sql sınıflara benim linq görünür:

[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 
    { 
        ... 
    } 
} 
:

İşte association

Article.Seller arkasında kod şudur: Bu dernek olduğunu linq to sql classes

Ve

Şimdi, bir Ürünü Satıcıya göndermek istediğimde, şu hatayı alıyorum:

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

Hata, satıcının alınmasında gerçekleşir.

Bu konuda nasıl bir fikir sahibi olunur?

DÜZENLEME: İşte DataContext kullanılan kod:

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

liste şu şekilde kullanılır:

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

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

bağlam edildiği veri yerleştirildiği geliyor da ondan. Almayı sağlayan kodu göstermeniz gerekir. – spender

+0

Yorumlarınız için teşekkürler, aldığım kodu ekledim! – Nagelfar

cevap

14

Çözüm: DataContext'i kullanırken

Basitçe yanlış üzerinde DeferredLoadingEnabled özelliğini ayarlayın:

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

sizin DataContext'i atmayın.

Tüm LINQ nesneleri bir DataContext ile ilişkilendirilmiştir. Nesneye DataContext'in oluşturulduğu using bloğu dışında erişiyorsunuzdur. Bulunan

İlgili konular