Entity framework defaultConnectionFactory是否首先影响EF代码的键和索引生成?

Entity framework defaultConnectionFactory是否首先影响EF代码的键和索引生成?,entity-framework,ef-code-first,Entity Framework,Ef Code First,最初,我们的解决方案将System.Data.Entity.Infrastructure.LocalDbConnectionFactory设置为web.config中的defaultConnectionFactory类型 <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> <parameters>

最初,我们的解决方案将System.Data.Entity.Infrastructure.LocalDbConnectionFactory设置为web.config中的defaultConnectionFactory类型

<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
  <parameters>
    <parameter value="v11.0" />
  </parameters>

仍然开放的想法

根据一些反映的代码,问题似乎在于DatabaseCreator类中的非System.Data.SqlClient或sqlce提供程序存在硬编码逻辑,这迫使生成沿着不同的路径进行

public void CreateDatabase(InternalContext internalContext, Func<DbMigrationsConfiguration, DbContext, DbMigrator> createMigrator, ObjectContext objectContext)
    {
        if (internalContext.CodeFirstModel == null || !(internalContext.ProviderName == "System.Data.SqlClient") && !(internalContext.ProviderName == "System.Data.SqlServerCe.4.0"))
        {
            internalContext.DatabaseOperations.Create(objectContext);
            internalContext.SaveMetadataToDatabase();
        }
        else
        {
            Type type = internalContext.Owner.GetType();
            DbMigrationsConfiguration dbMigrationsConfiguration = new DbMigrationsConfiguration();
            dbMigrationsConfiguration.ContextType = type;
            dbMigrationsConfiguration.AutomaticMigrationsEnabled = true;
            dbMigrationsConfiguration.MigrationsAssembly = type.Assembly;
            dbMigrationsConfiguration.MigrationsNamespace = type.Namespace;
            dbMigrationsConfiguration.TargetDatabase = new DbConnectionInfo(internalContext.OriginalConnectionString, internalContext.ProviderName);
            createMigrator(dbMigrationsConfiguration, internalContext.Owner).Update();
        }
        internalContext.MarkDatabaseInitialized();
    }

最后,我们更新了datacontext构造函数,以便在代码中而不是在配置中设置DefaultConnectionFactory。仅在开发调试模式下,如果db不存在,我们首先将其设置为SqlConnectionFactory,因为它会生成带有索引和更好命名的db。在此之后或在发布模式下,我们希望使用具有我们想要的重试逻辑的自定义提供程序。

从配置中注释掉defaultConnectionFactory也会产生命名良好的索引和键,就像使用LocalDbConnectionFactory一样。这是默认值,对吗?查看更多反映的代码,似乎最终使用的是DbProviderServices类,因此仍试图深入了解在这种情况下使用的是什么。将defaultFactory设置为“System.Data.Entity.Infrastructure.SqlConnectionFactory,EntityFramework”也适用于我想要的正确索引和fk名称。我的供应商正在内部包装这家工厂。我看不出这个工厂或任何与之相关的东西会导致索引和键被这样命名。
public void CreateDatabase(InternalContext internalContext, Func<DbMigrationsConfiguration, DbContext, DbMigrator> createMigrator, ObjectContext objectContext)
    {
        if (internalContext.CodeFirstModel == null || !(internalContext.ProviderName == "System.Data.SqlClient") && !(internalContext.ProviderName == "System.Data.SqlServerCe.4.0"))
        {
            internalContext.DatabaseOperations.Create(objectContext);
            internalContext.SaveMetadataToDatabase();
        }
        else
        {
            Type type = internalContext.Owner.GetType();
            DbMigrationsConfiguration dbMigrationsConfiguration = new DbMigrationsConfiguration();
            dbMigrationsConfiguration.ContextType = type;
            dbMigrationsConfiguration.AutomaticMigrationsEnabled = true;
            dbMigrationsConfiguration.MigrationsAssembly = type.Assembly;
            dbMigrationsConfiguration.MigrationsNamespace = type.Namespace;
            dbMigrationsConfiguration.TargetDatabase = new DbConnectionInfo(internalContext.OriginalConnectionString, internalContext.ProviderName);
            createMigrator(dbMigrationsConfiguration, internalContext.Owner).Update();
        }
        internalContext.MarkDatabaseInitialized();
    }