Ядро EF принудительно отслеживает в статическом классе

#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 .