簡體   English   中英

IQueryable 在使用后被釋放

[英]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 以便我可以繼續使用它?

您需要選擇:

  1. 不處理上下文(沒有 using 語句)並獲取依賴於數據庫的IQueryable<User>
  2. 通過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.

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