簡體   English   中英

DbContext 已被處理為多個部分視圖

[英]DbContext has been disposed with multiple partial views

我有一個視圖,其中有 3 個由選項卡分隔的部分視圖。 每個局部視圖查詢數據庫並將結果返回到顯示在表中的列表中。 數據訪問層使用通用存儲庫來訪問數據。

這是獲取單個表的所有結果的通用方法:

 public virtual IList<T> GetAll<T>(params Expression <Func<T, object>>[] navigationProperties) where T : class
        {

            try
            {
                using (Context)
                {
                    List<T> list;
                    IQueryable<T> dbQuery = Context.Set<T>();

                    foreach (Expression<Func<T, object>> navigationProperty in navigationProperties)
                        dbQuery = dbQuery.Include<T, object>(navigationProperty);

                        list = dbQuery.AsNoTracking().ToList();

                    return list;
                }
            }
            catch (ArgumentNullException ex)
            {
                throw new InvalidOperationException($"Invalid state: {typeof(T).Name} DbSet is null.", ex);
            }
        }

這是我用於創建此方法的資源

要使用此方法,我手動包含導航屬性。 這些是視圖中使用的導航屬性。

 public async Task<ActionResult> DataTableAsync<TEntity>(AlertModel alert, string viewName = null, 
params Expression<Func<TEntity, object>>[] navigationProperties) where TEntity : class
        {

            // get data
            var data = (from a in await LimsManager.AllAsync<TEntity>(navigationProperties)
                        select a).ToList();

            // create sample log model 
            var response = new TableModel<TEntity>
            {
                Data = data
            };

            return PartialView(viewName ?? $"_{typeof(TEntity).Name}Table", response);

        }

導航屬性通過 lambda 表達式s => s.'NavigationProperty'

在這個視圖上,我為每個局部視圖調用GetAll()方法。 前兩個局部視圖正確返回,但第三個局部視圖總是給我上下文已處理錯誤。 即使在調用.ToList().ToList()發生這種情況。

據我了解,通過研究這個問題,似乎在第二次調用結束時處理了上下文,因此到第三次調用時,上下文已經消失了

所以我的問題是,如何防止在第三次調用之前處理上下文?

每天學習新東西。

在我的實體框架庫 (DAL) 中,我有一個上下文構造函數

 public Store(EntitiesContext context)
        {
            Context = context;
        }

在我的方法中,我使用了Context 因此,每次調用該方法時,它都會使用在類被實例化和被處理時創建的 Context。 為了修復它,我只是將上下文創建直接放在 using 語句中。 因此,我沒有using(Context)將其更改為using (var db = new LimsEntitiesContext())

暫無
暫無

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

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