[英]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.