[英]IQueryable is disposed after using
我有一些看起來像這樣的短代碼:
public static IQueryable<User> SelectFromEmployee(int employee)
{
using (var ctx = Database.AccountingContext())
{
return ctx.Users.Where(c => c.Employee_FK == employee);
}
}
如果我只是保持此代碼原樣並使用結果,我會得到一個異常,告訴我數據已被處理。 但如果我這樣做:
public static IEnumerable<User> SelectFromEmployee(int employee)
{
using (var ctx = Database.AccountingContext())
{
return ctx.Users.Where(c => c.Employee_FK == employee).ToList();
}
}
一切正常。 但我的問題是我想使用需要 IQueryable 的 Linq Dynamic。 有什么方法可以返回本地 IQueryable 以便我可以繼續使用它?
您需要選擇:
IQueryable<User>
。ToList().AsQueryable()
處理上下文並獲取IQueryable<User>
,這依賴於 Memory。請注意,重要的一點是數據通過延遲加載的位置。
問題是您正在創建數據上下文,然后將其處置:
using (var ctx = Database.AccountingContext())
只是為了讓你繼續,試試這個:
ObjectContext context = Database.AccountingContext();
public static IQueryable<User> SelectFromEmployee(int employee)
{
return context.Users.Where(c => c.Employee_FK == employee);
}
我在這里所做的是我將數據上下文移到了方法之外,現在的問題是您需要自己控制它的處置,您可能還需要考慮您正在阻止更多連接,所以請確保處置連接。
編輯
我假設您也希望能夠使用關系等。
問題是您正在處理 DataContext。 一種選擇是在使用查詢結果時保留它。
如果你想按字面意思做你所要求的
public static IQueryable<User> SelectFromEmployee(int employee)
{
using (var ctx = Database.AccountingContext())
{
return ctx.Users.Where(c => c.Employee_FK == employee).ToList().AsQueryable();
}
}
請注意,雖然您返回的內容不再與數據上下文相關聯,但例如,如果數據上下文尚未處理,則關系導航將無法正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.