Свойство Entity Framework DbContext ModelCaching недоступно

Я пишу несколько модульных тестов для создания базы данных с использованием кода EF. Во время выполнения модульных тестов метод DBContext->OnModelCreating выполняется только 1 раз, а затем модель кэшируется для остальных оставшихся тестов.

Я хочу иметь возможность выполнять «OnModelCreating» для каждого модульного теста отдельно, пытаясь установить свойство ModelCaching, как указано в документации:

// Remarks:
//     Typically, this method is called only once when the first instance of a derived
//     context is created. The model for that context is then cached and is for all
//     further instances of the context in the app domain. This caching can be disabled
//     by setting the ModelCaching property on the given ModelBuidler, but note that
//     this can seriously degrade performance. More control over caching is provided
//     through use of the DbModelBuilder and DbContextFactory classes directly.
protected virtual void OnModelCreating(DbModelBuilder modelBuilder);

Однако в этом построителе моделей нет такого свойства "ModelCaching".

Как еще я могу отключить кэширование этой модели? Тесты проходят нормально один за другим, но из-за этого кэширования они терпят неудачу при запуске подряд.

Лучше сказать, как я могу заставить ApplicationDbContext -> OnModelCreating запускаться для каждого теста отдельно? Теперь он запускается только один раз, когда впервые используется для кучи модульных тестов.


person Pinte Dani    schedule 27.07.2017    source источник
comment
Это значит, что тесты используют разные модели, почему так?   -  person Gert Arnold    schedule 27.07.2017
comment
Нет, в тестах используется одна и та же модель. Я хочу отключить кэширование Dbcontext между модульными тестами.   -  person Pinte Dani    schedule 27.07.2017
comment
Возможный дубликат Как отключить кэширование модели в Entity Framework 6 (подход Code First)   -  person Pinte Dani    schedule 28.07.2017
comment
Я не понимаю. На тесты не влияет модель, которая была загружена ранее, потому что тесты (и любое приложение в этом отношении) используют только модель и никогда не изменяют ее. Может быть, вы хотите, чтобы на каждый тест не влияли данные, которые были загружены предыдущим тестом?   -  person Gert Arnold    schedule 28.07.2017
comment
Вы нашли, как это сделать?   -  person Sin    schedule 21.01.2019


Ответы (1)


Похоже, это свойство больше не доступно. Вам нужно сохранить разные модели БД и инициализировать свой контекст для другого соединения.

Этот ответ помог мне в моем случае. Путем реализации IDbModelCacheKeyProvider EF может кэшировать несколько моделей БД для вас на основе разных CacheKey.

person Sin    schedule 21.01.2019