c# - 绑定(bind)时已释放 ObjectContext 实例

标签 c# .net entity-framework exception-handling

这是我的代码:

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();

当我尝试绑定(bind)时出现错误:

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

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

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

另一个相关问题:

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

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

我必须为那个对象创建特定的类吗?

最佳答案

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

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

关于c# - 绑定(bind)时已释放 ObjectContext 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3529977/

相关文章:

c# - SQLite 异常 : "no such function: BigCount" when using "count" calling OData service with EntityFramework provider

c# - 困惑 : ASP. NET Core 2 不是托管代码,但 ASP.Net Core Runtime 是做什么用的?

c# - 扩展 .NET 类型系统,以便编译器在某些情况下强制执行原始值的语义

c# - MonoTouch AOT 编译器 - 大型方法失败

.net - 带有 Entity Framework 的存储库模式

c# - 忽略 TransactionScope 中的 SqlTransaction.Commit

c# - 从 Windows 中选择声音并播放

c# - 在 C# 中获取泛型类型的用户友好名称

c# - SetupDiGetDeviceInterfaceDetail 无法解释的错误

c# - 悲观地锁定进程之间的代码