同一个配置文件中的两个不同的提供者我正在使用EntityFramework6.1.0我有2个提供者。MysqlClient和SQLServerCE,我需要创建2个不同的DBContext。这迫使我创建2个配置类,因为mysql有一些不同的东西。但是当我初始化应用程序时,Database.DefaultConnectionFactory来自defaultConnectionFactory(配置文件),我无法指定在已终止的上下文中采用哪个提供程序。我的配置文件:Mysql上下文:SetInitializer(新的MigrateDatabaseToLatestVersion());}publicSistemaContext():base(GetConnectionString()){}privatestaticstringGetConnectionString(){return"Server=127.0.0.1;Database=?????;Uid=?????;Pwd=?????;Port=3306;";//MySQL}}}SQLCe背面:(){Database.SetInitializer(newMigrateDatabaseToLatestVersion());}publicSistemaContext2():base(GetConnectionString()){}privatestaticstringGetConnectionString(){return"DataSource=C:/teste2.sdf;PersistSecurityInfo=False;";//SQLCE}}}Mysql配置publicsealedclassConfiguration:DbMigrationsConfiguration{publicConfiguration(){DbInterception.Add(newNLogCommandInterceptor());//guardarlogsAutomaticMigrationsEnabled=true;AutomaticMigrationDataLossAllowed=true;SetSqlGenerator("MySql.Data.MySqlClient".Entity.MySqlMigrationSqlGenerator());//Mysqldaerrosenaocolocarisso.(PeloquevidaparacolocarnoApp.configtambem.)SetHistoryContextFactory("MySql.Data.MySqlClient",(conn,schema)=>newMySQLHistoryContext(conn,schema));}}SQLCE配置publicsealedclassConfiguration2:DbMigrationsConfiguration{publicConfiguration2(){DbInterception.Add(newNLogCommandInterceptor());//guardarlogsAutomaticMigrationsEnabled=true;AutomaticMigrationDataLossAllowed}=}true首先,你使用了错误的配置类DbConfigurationType是一个需要继承自DbConfiguration而不是DbMigrationsConfiguration的类型。DbMigrationsConfiguration实际上仅用于迁移器和数据库初始化器。公共类MyDbConfiguration:DbConfiguration{publicMyDbConfiguration(){this.SetDefaultConnectionFactory(newSystem.Data.Entity.Infrastructure.SqlCeConnectionFactory("System.Data.SqlServerCe.4.0"));this.SetProviderServices("System.Data.SqlServerCe.4.0")",SqlCeProviderServices.Instance);this.AddInterceptor(newNLogCommandInterceptor());//守卫日志this.SetMigrationSqlGenerator("System.Data.SqlServerCe.4.0",()=>newSqlCeMigrationSqlGenerator());}}[DbConfigurationType(typeof(MyDbConfiguration))]publicclassTestContext:DbContext不幸的是,即使有多个DbConfigurations,也无法设置多个DefaultConnectionFactories。在你的情况下,你必须存储连接app.config中的字符串并将名称传递给DbContext构造函数。publicclassTestContext:DbContext{publicTestContext():base("name=MyConnectionString"){}将根据app.config中MyConnectionString的提供程序名称初始化连接,或者如果您不想要app.config中的连接字符串将刚刚初始化的DbConnection传递给DbContext构造函数publicclassTestContext:DbContext{publicTestContext():base(newSqlCeConnection(GetConnectionString()),true){}或者,如果您不想初始化特定的连接,使用DbProviderFactory。publicclassTestContext:DbContext{publicTestContext():base(GetConnection(),true){}publicstaticDbConnectionGetConnection(){varfactory=DbProviderFactories.GetFactory("System.Data.SqlServerCe.4.0");varconnection=factory.CreateConnection();connection.ConnectionString="DataSource=C:/teste2.sdf;PersistSecurityInfo=False;";返回连接;}解决了!(对我来说)我的配置文件2上下文与问题相同。但是我从2个上下文中删除了[DbConfigurationType(typeof(Sistema.DataAccess.Migrations.Configuration))]配置类1(mysql)publicsealedclassConfiguration:DbMigrationsConfiguration{publicConfiguration(){DbConfiguration.SetConfiguration(newDbConfigurationBase("MySQL"));DbInterception.Add(newNLogCommandInterceptor());//guardar记录AutomaticMigrationsEnabled=true;AutomaticMigrationDataLossAllowed=true;SetSqlGenerator("MySql.Data.MySqlClient",newMySql.Data.Entity.MySqlMigrationSqlGenerator());//Mysqldaerrosenaocolocarisso.(PeloquevidaparacolocarnoApp.configtambem.)SetHistoryContextFactory("MySql.Data.MySqlClient",(conn,schema)=>newMySQLHistoryContext(conn,schema));}}配置二级(SQLCE)publicsealedclassConfiguration2:DbMigrationsConfiguration{publicConfiguration2(){DbConfiguration.SetConfiguration(newDbConfigurationBase("SQLCE"));DbInterception.Add(newNLogCommandInterceptor());//guardar记录AutomaticMigrationsEnabled=真;AutomaticMigrationDataLossAllowed=true;我使用您的DBConnectionIdea创建连接您需要指定适当的提供程序作为连接字符串的一部分。我通常在配置中这样做,所以是这样的:以上是c#学习教程:同一个配置文件中的两个不同的提供者共享整个东西,如果它对任何人有用并且需要了解更多关于c#学习教程,我希望大家多多关注吧~本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
