绑定时已释放ObjectContext实例

这是我的代码:

public class JobsRepository:BaseNewsletterRepository { public IEnumerable GetJobs() { var jobs = Newsletterctx.Jobs.Include("Info").OrderBy(o => o.JobID); return jobs.AsEnumerable(); } } public class BusinessNewsletter { public static IEnumerable GetJobs() { using (JobsRepository jobsRepository = new JobsRepository()) { return jobsRepository.GetJobs(); } } } rptJobs.DataSource = BusinessNewsletter.GetJobs(); rptJobs.DataBind(); 

当我尝试绑定时,我得到错误:

ObjectContext实例已被释放,不能再用于需要连接的操作。

是唯一的解决方案,在BusinessNewsletter类中转换和返回List吗?

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

另一个相关问题:

如何在不指定特定类型( ListIEnumerable )的情况下检索数据并将数据绑定到转发器
如果我返回这样的特定对象,我需要它:

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

我必须为该对象创建特定的类?

是的,您必须在返回之前转换为一些内存中的集合。 问题是返回的结果序列是延迟评估的,因此在数据源尝试枚举结果之前不会尝试查询数据库。 此时ObjectContext已经被处理掉了。

对于第二个问题,您应该创建自己的类,因为您不能从声明它们的方法返回匿名类型。

using子句在View能够使用之前处理您的ObjectContext。 解决方案是删除using子句并更改代码,如下所示:

  JobsRepository jobsRepository = new JobsRepository(); return jobsRepository.GetJobs();