最初,我们的解决方案将 System.Data.Entity.Infrastructure.LocalDbConnectionFactory 设置为 web.config 中的 defaultConnectionFactory 类型。
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
我不确定我们是否真的需要它,因为我们使用本地 SQL Server 进行开发,使用 SQL Azure 进行实际部署。我们使用 EF Code First,并使用名为 PK_dbo.Customers 和 FK_dbo.Customers_dbo.Employers_EmployerID 的键创建表,并为每个外键创建索引,如 IX_EmployerID。
我们已根据本文中的想法切换到自定义连接工厂,用于由 Robert Moore 创建的 ReliableDbProvider,因为我们希望为 SQL Azure 的瞬时故障内置重试逻辑。它似乎工作正常,但似乎也导致键的名称不同(PK__Customer__A4AE64B8BB3388DF,Customer_Employer)并且不生成索引。
我没想到工厂会影响一代人。知道它是如何贡献的吗?
在反映了一些代码之后,似乎它与在 DropCreateDatabaseIfModelChanges 初始化程序中使用的 DbMigrationsConfiguration 类的工作方式有关,所以我们必须看看是否可以以某种方式覆盖它。
public DbMigrationsConfiguration()
{
this.SetSqlGenerator("System.Data.SqlClient", new SqlServerMigrationSqlGenerator());
this.SetSqlGenerator("System.Data.SqlServerCe.4.0", new SqlCeMigrationSqlGenerator());
this.CodeGenerator = new CSharpMigrationCodeGenerator();
}
仍然对想法持开放态度!