使用DbMigrationsConfiguration将SetExecutionStrategy设置为SqlAzureExecutionStrategy?

时间:2014-09-26 17:00:18

标签: entity-framework azure-sql-database ef-migrations entity-framework-6.1

我今天看到一篇关于实现SqlAzureExecutionStrategy的帖子:

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

但是,我能找到的所有示例都使用从DbConfiguration继承的配置。我的项目使用的是EF6 Code First Migrations,它创建的Configuration继承自DbMigrationsConfiguration。这个类没有包含SetExecutionStrategy的定义,我找不到实际将SqlAzureExecutionStrategy(或任何SetExecutionStrategy)与DbMigrationsConfiguration结合起来的例子。

可以这样做吗?

2 个答案:

答案 0 :(得分:31)

如果有其他人遇到这个问题,这就是我们想到的:

创建一个继承自DbConfiguration(具有SetExecutionStrategy)的自定义类:

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

然后将此属性添加到DataContext,指定它是使用您的自定义类:

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

答案 1 :(得分:3)

经过更多调查,现在我认为正确的答案是: DbMigrationsConfiguration是完全独立的,仅配置迁移设置。这就是为什么它不会继承或具有与DbConfiguration相同的选项。

没有加载,与实际操作无关。

因此,您可以(并且应该)基于DbConfiguration声明一个单独的类来配置运行时行为。

我添加了一些跟踪,我看到第一次在应用程序中使用DatabaseContext时,它会运行迁移和迁移配置。 但是,第一次实际使用DatabaseContext(例如从数据库加载一些数据)时,它也会加载你的DbConfiguration类。

所以我认为根本没有任何问题。