У меня есть представление, которое имеет 3 частичных представления, разделенных вкладками. Каждое частичное представление запрашивает базу данных и возвращает результаты в список, отображаемый в таблице. Уровень доступа к данным использует общий репозиторий c для доступа к данным.
Вот метод generi c, который получает все результаты для одной таблицы:
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);
}
Свойства навигации передаются с помощью лямбда-выражения s => s.'NavigationProperty'
.
В этом представлении я вызываю метод GetAll()
для каждого частичного представления. Первые два частичных представления возвращаются правильно, но третье частичное представление всегда дает мне контекст, в котором была устранена ошибка. Это происходит даже при звонке .ToList()
.
Насколько я понимаю, исследуя проблему, кажется, что контекст удаляется в конце второго вызова, поэтому в третий раз он вызывает , контекст уже исчез .
Итак, мой вопрос: как я могу предотвратить удаление контекста перед третьим вызовом?