Как предотвратить автоматическое обнаружение DbConfiguration - PullRequest
0 голосов
/ 11 июля 2019

Я нахожусь в решении с 200+ проектами, и для одного из приложений требуется настраиваемая DbConfiguration, например:

    public class MyDbConfiguration : DbConfiguration
    {
        public MyDbConfigurationDbConfiguration()
        {
            SetExecutionStrategy("System.Data.SqlClient", 
                () => new SqlAzureExecutionStrategy());
        }
    }

Но когда я ее представляю, обнаруживается, что она запаздывает во время модульного тестирования (где это не относится в любом случае).Я инициализирую конфигурацию программно при входе в приложение, поэтому все работает в рабочем режиме:

DbConfiguration.SetConfiguration(new Office2EntityFrameworkDbConfiguration());

Но около 100 проектов, которые являются модульными тестами, не имеют точки входа (и я верю этомубыло бы плохо изменить дизайн всех DbContexts (их около 70) или всех модульных тестов (15000 или около того), чтобы убедиться, что эта ненужная конфигурация DbConfiguration достаточно быстро инициализируется.

System.InvalidOperationException: The default DbConfiguration instance was used by the Entity Framework before the 'MyDbConfiguration' type was discovered. An instance of 'MyDbConfiguration' must be set at application start before using any Entity Framework features or must be registered in the application's config file. See http://go.microsoft.com/fwlink/?LinkId=260883 for more information.
   ved System.Data.Entity.Infrastructure.DependencyResolution.DbConfigurationManager.EnsureLoadedForAssembly(Assembly assemblyHint, Type contextTypeHint)
   ved System.Data.Entity.Infrastructure.DependencyResolution.DbConfigurationManager.EnsureLoadedForContext(Type contextType)
   ved System.Data.Entity.DbContext.InitializeLazyInternalContext(IInternalConnection internalConnection, DbCompiledModel model)
   ved System.Data.Entity.DbContext..ctor(DbConnection existingConnection, Boolean contextOwnsConnection)

1 Ответ

0 голосов
/ 11 июля 2019

Я был озадачен этим несколько дней. Похоже, что MyDbConfiguration обнаруживается только в том случае, если он находится в той же сборке, что и сам DbContext (и, вероятно, в той, в которой также создается экземпляр DbContext).

В итоге я переместил MyDbConfiguration в свой собственный проект, где он будет единственным классом. И это сработало!

...