簡體   English   中英

使用IQueryable <>時已處置DbContext

[英]DbContext has been disposed when using IQueryable<>

我在像這樣的存儲庫中有一個簡單的查詢:

   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<>而不是List<> ,並且我知道這樣做是什么,成為一個惰性查詢,並且直到它被實際調用才執行。 但是我不明白為什么會拋出異常

“ DbContext已被處置”

當我將其更改為IQueryable<> ,我唯一的選擇是使此工作在存儲庫中設置DbContext的私有實例並保持打開狀態嗎?

在上面的代碼示例中,您正在調用ToList() ,它在using塊的末尾處理上下文之前從數據庫獲取結果。 這樣應該可以正常工作。

如果返回IQueryable ,那么當您調用ToList()FirstOrDefault()或任何其他內容並實際執行查詢時(可能在代碼的后面), using塊早就處置了“ MeetingContext”,因此您不能使用它。 因此,例外。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM