首页 > 解决方案 > 如何设置使用 Database First 生成的 DbContext 的执行策略?

问题描述

我正在使用 Entity Framework 6 的 Database First 迁移为数据库自动生成一个DbContext和一组实体。此数据库经常更改,因此需要每隔一段时间重新运行一次迁移以使其保持最新状态,从而删除手动对DbContext. 为了给出DbContext标准的重试逻辑,我想让它使用SqlAzureExecutionStrategy.

到目前为止,我已经成功地使用反射动态创建了一个类,该类继承自DbContext并配置DbConfigurationTypeAttribute为使用执行策略。然而,这似乎有点反手 - 有没有更清洁,更明显的方法?

标签: c#entity-framework-6

解决方案


这就是我所做的。我添加了一个新类:

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

然后...在我的 web.config 中,在实体框架配置部分:

    </runtime>
    <entityFramework>
         <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">

我刚刚添加了这个属性:

    </runtime>
    <entityFramework codeConfigurationType="SharedTools.AzureDBConfiguration, SharedTools">
         <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">

调试器在 DBConfiguration 中首先被命中。它似乎已经成功了,没有反思。我确实通过在“实体”DBContext 对象的构造函数中放置一个断点并通过监视窗口对其进行探索来确认它。具体来说,查看 Configuration 对象的非公共成员,_internalContext 上有一个名为 AppConfig 的属性,您可以看到其中列出的 ConfigurationTypeName。


推荐阅读