Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用IQueryable时已释放DbContext<&燃气轮机;_C#_Asp.net Mvc_Entity Framework - Fatal编程技术网

C# 使用IQueryable时已释放DbContext<&燃气轮机;

C# 使用IQueryable时已释放DbContext<&燃气轮机;,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我在存储库中有一个简单的查询,如下所示: public List<MeetingVM> GetMeetingsInRadius(decimal latitude, decimal longitude, int miles, int dayOfWeek) { var point = DbGeography.FromText(string.Format("POINT ({0} {1})", longitude, latitude), 4326);

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

   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;
       }           
   }
public List GetMeetingsInRadius(十进制纬度、十进制经度、整数英里、整数周天数)
{
var point=DbGeography.FromText(string.Format(“点({0}{1})”,经度,纬度),4326);
使用(MeetingContext db=new MeetingContext())
{
var结果=(来自数据库会议中的a)
其中a.地理位置.距离(点)*0.000621371新会议VM
{
地址=x.地址,
CasoID=x.地址,
DayOfWeek=x.DayOfWeek,
距离=x.地理距离(点)*0.000621371,
纬度=x.纬度,
LocationName=x.LocationName,
经度=x.经度,
MeetingName=x.MeetingName,
MeetingType=x.MeetingType,
选项=x。选项,
时间=x.时间
}).OrderBy(x=>x.Time).ToList();
返回结果;
}           
}
我尝试将其更改为返回
IQueryable
,而不是
List
,我知道这会变成一个惰性查询,在实际调用它之前不会执行。但我不明白为什么它会抛出异常

“DbContext已被释放”


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

在上面的代码示例中,您正在调用
ToList()
,它在
使用
块处置上下文之前从数据库获取结果。所以这应该很好


如果您返回一个
IQueryable
,那么当您调用
ToList()
FirstOrDefault()
或其他调用并实际执行查询时(可能在代码中要晚得多),
using
块早已处理掉了您的“MeetingContext”,因此您无法使用它。因此出现了例外情况。

在上面的代码示例中,您调用的是
ToList()
,它在
使用
块处理上下文之前从数据库中获取结果。所以这应该很好


如果您返回一个
IQueryable
,那么当您调用
ToList()
FirstOrDefault()
或其他调用并实际执行查询时(可能在代码中要晚得多),
using
块早已处理掉了您的“MeetingContext”,因此您无法使用它。因此出现了例外。

我就是这么想的。。。然后我必须看一下始终保持DbContext打开的利与弊??我只是认为框架将保持使用块打开,直到查询完成。这就是我所想的。。。然后,我必须看一下始终保持DbContext打开的利弊??我只是认为框架将保持使用块打开,直到查询完成