绑定时已释放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; }
另一个相关问题:
如何在不指定特定类型( List
或IEnumerable
)的情况下检索数据并将数据绑定到转发器
如果我返回这样的特定对象,我需要它:
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();