2010-08-20 25 views
4

這是我的代碼:ObjectContext的實例已經被佈置,同時結合

public class JobsRepository:BaseNewsletterRepository 
{ 
    public IEnumerable<Job> GetJobs() 
    { 
     var jobs = Newsletterctx.Jobs.Include("Info").OrderBy(o => o.JobID);    
     return jobs.AsEnumerable(); 
    } 
} 

public class BusinessNewsletter 
{ 
    public static IEnumerable<Job> GetJobs() 
    {  
     using (JobsRepository jobsRepository = new JobsRepository()) 
     { 
      return jobsRepository.GetJobs(); 
     }  
    } 
}  

rptJobs.DataSource = BusinessNewsletter.GetJobs(); 
rptJobs.DataBind(); 

當我嘗試綁定我得到錯誤:

The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.

是唯一的解決辦法,在BusinessNewsletter投並返回列表類?

public static IList<Job> GetJobs() 
{ 
    IList<Job> job; 
    using (JobsRepository jobsRepository = new JobsRepository()) 
    { 
     job = jobsRepository.GetJobs().ToList(); 
    } 
    return job; 
} 

另一個相關的問題:

我怎樣才能檢索和數據綁定到一箇中繼器,而無需指定特定類型(List<type>IEnumerable<type>
我需要它的情況下,我回到像特定對象這個:

var specificJob = from job in Newsletterctx.Jobs.Include("Info") 
        select new 
        { 
         ID = job.JobID, 
         EmailId = job.Info.PreparedEmailID 
        }; 

我必須爲那個對象創建特定的類嗎?

回答

5

是的,你將不得不在返回之前轉換爲一些內存中的集合。問題是返回的結果序列是延遲評估的,因此在數據源嘗試枚舉結果之前,不會嘗試查詢數據庫。此時ObjectContext已被處置。

對於第二個問題,您應該創建自己的類,因爲您無法從聲明它們的方法返回匿名類型。

+0

我有一個匿名類型的代碼完美工作... – Azimuth 2017-02-01 11:34:29

0

使用子句在View能夠使用它之前處理ObjectContext。 解決方案將刪除使用條款,並更改您的代碼,如下所示:

JobsRepository jobsRepository = new JobsRepository(); 
    return jobsRepository.GetJobs(); 
相關問題