Подтвердить что ты не робот

SetExecutionStrategy для SqlAzureExecutionStrategy с DbMigrationsConfiguration?

Сегодня я увидел сообщение о реализации SqlAzureExecutionStrategy:

http://romiller.com/tag/sqlazureexecutionstrategy/

Однако все примеры, которые я могу найти, используют конфигурацию, которая наследуется от DbConfiguration. Мой проект использует EF6 Code First Migrations, а созданная им конфигурация наследуется от DbMigrationsConfiguration. Этот класс не содержит определения для SetExecutionStrategy, и я не могу найти примеров, которые фактически объединяют SqlAzureExecutionStrategy (или любую SetExecutionStrategy) с DbMigrationsConfiguration.

Можно ли это сделать?

4b9b3361

Ответ 1

Если кто-то еще сталкивается с этим вопросом, это то, что мы выяснили:

Создайте собственный класс, наследующий от DbConfiguration (который имеет SetExecutionStrategy):

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

Затем добавьте этот атрибут в свой DataContext, указав, что он должен использовать ваш собственный класс:

[DbConfigurationType(typeof(DataContextConfiguration))]
public class DataContext : DbContext, IDataContext
{
    ...
}

Ответ 2

После дальнейшего расследования, теперь я думаю, что правильный ответ таков: DbMigrationsConfiguration полностью разделен и настраивает только параметры миграции. Поэтому он не наследует или не имеет таких же параметров, как DbConfiguration.

Он не загружен и не имеет значения для реальной работы.

Таким образом, вы можете (и должны) объявить отдельный класс на основе DbConfiguration, чтобы настроить поведение во время выполнения.

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

Поэтому я не думаю, что есть какая-то проблема.