【问题标题】:DbContext has been disposed when using IQueryable<>使用 IQueryable<> 时已释放 DbContext
【发布时间】:2014-07-28 03:39:48
【问题描述】:

我在存储库中有一个简单的查询,如下所示:

   public List<MeetingVM> GetMeetingsInRadius(decimal latitude, decimal longitude, int miles, int dayOfWeek)
   {
       var point = DbGeography.FromText(string.Format("POINT ({0} {1})", longitude, latitude), 4326);
       using (MeetingContext db = new MeetingContext())
       {
           var results = (from a in db.Meetings
                          where a.Geography.Distance(point) * 0.000621371 <= miles
                          && a.DayOfWeek == (Meetings.Models.Enums.DayOfWeek)dayOfWeek
                          select a).Select(x => new MeetingVM
                          {
                              Address = x.Address,
                              CasoID = x.Address,
                              DayOfWeek = x.DayOfWeek,
                              distance = x.Geography.Distance(point) * 0.000621371,
                              Latitude = x.Latitude,
                              LocationName = x.LocationName,
                              Longitude = x.Longitude,
                              MeetingName = x.MeetingName,
                              MeetingType = x.MeetingType,
                              Options = x.Options,
                              Time = x.Time
                          }).OrderBy(x => x.Time).ToList();               
           return results;
       }           
   }

我尝试将其更改为返回 IQueryable&lt;&gt; 而不是 List&lt;&gt; ,我理解它的作用,成为一个惰性查询,并且在实际调用之前不执行。但我不明白为什么它会抛出异常

“DbContext 已被释放”

当我将其更改为 IQueryable&lt;&gt; 时,我唯一的选择是在存储库中设置 DbContext 的私有实例并使其保持打开状态吗?

【问题讨论】:

    标签: c# asp.net-mvc entity-framework


    【解决方案1】:

    在上面的代码示例中,您调用了ToList(),它会在using 块结束之前从数据库中获取您的结果,从而处理您的上下文。所以应该可以正常工作。

    如果您返回 IQueryable,那么当您调用 ToList()FirstOrDefault() 或其他任何内容并实际执行查询时(可能在您的代码中很晚),using 块早就被处理掉了你的“MeetingContext”,所以你不能使用它。因此例外。

    【讨论】:

    • 这就是我的想法……我必须看看始终保持 DbContext 打开的优点和缺点??
    • 我只是认为框架会保持使用块打开直到查询完成
    猜你喜欢
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多