#entity-framework #asp.net-core #entity-framework-core
#entity-framework #asp.net-core #entity-framework-ядро
Вопрос:
Я хочу посмотреть, есть ли способ принудительно отслеживать AsNoTracking в статическом классе? Я знаю, что есть другие способы сделать это, но этот используется во всем приложении. Это всего лишь базовый пример. SearchTest().Search()
private IQueryable<SomeModel> SearchTest()
{
return (from t in _dbContext.test
select new SomeModel()
{
a.test1
}).AsQueryable();
}
public static async Task<SomeModel> Search<T>(this IQueryable<T> query)
{
return new SomeModel(){ Count=await query.CountAsync()};
}
Комментарии:
1. Я могу добавить asnotracking к каждому запросу. Не то, что вы имеете в виду?
2.
dbContext.test.(...).AsNoTracking()
? Тот факт, что класс или метод статичны, не имеет значения.3. @CodeCaster: Вы можете добавить это в SearchTest, но в поиске<T> это недоступно. Мой пример плох… позвольте мне обновить его!
4. В этом примере я не вижу преимущества даже в использовании AsNoTracking, поскольку единственное, что выполняется в хранилище данных, — это подсчет, и это не будет отслеживаться в DbContext, поскольку никакие объекты не возвращаются. Даже если бы оно вернуло проекцию из
SearchTest
, использование SomeModel является проекцией, и это также не было бы отслежено, потому что это не отображаемая возвращаемая сущность.5. Также, если вы действительно хотите использовать
AsNoTracking
, не имеет значения, где вы его применяете, главное, чтобы оно применялось к некоторому экземпляру, где тип реализует IQueryable или IQueryable<T> . Смотрите также Расширения DB. Метод отслеживания AsNoTracking .