SetExecutionStrategy для SqlAzureExecutionStrategy с DbMigrationsConfiguration?
Сегодня я увидел сообщение о реализации SqlAzureExecutionStrategy:
http://romiller.com/tag/sqlazureexecutionstrategy/
Однако все примеры, которые я могу найти, используют конфигурацию, которая наследуется от DbConfiguration. Мой проект использует EF6 Code First Migrations, а созданная им конфигурация наследуется от DbMigrationsConfiguration. Этот класс не содержит определения для SetExecutionStrategy, и я не могу найти примеров, которые фактически объединяют SqlAzureExecutionStrategy (или любую SetExecutionStrategy) с DbMigrationsConfiguration.
Можно ли это сделать?
Ответы
Ответ 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.
Поэтому я не думаю, что есть какая-то проблема.