我今天看到一篇关于实现SqlAzureExecutionStrategy的帖子:
http://romiller.com/tag/sqlazureexecutionstrategy/
但是,我能找到的所有示例都使用从DbConfiguration继承的配置。我的项目使用的是EF6 Code First Migrations,它创建的Configuration继承自DbMigrationsConfiguration。这个类没有包含SetExecutionStrategy的定义,我找不到实际将SqlAzureExecutionStrategy(或任何SetExecutionStrategy)与DbMigrationsConfiguration结合起来的例子。
可以这样做吗?
答案 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类。
所以我认为根本没有任何问题。