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