2014-02-17 40 views
1

我有两个实体框架上下文,一个用于MySql,一个用于sql。如果我运行应用程序,我得到以下错误是否有可能为MySql和SqlServer提供EF上下文?

The default DbConfiguration instance was used by the Entity Framework before the  'MySqlEFConfiguration' type was discovered. 

但是,如果我这样做给它的Database.SetInitializer<MySqlContext>发现在App启动数据库类型,我正常的SQL上下文目前正试图使用​​mysql提供连接。

我的MySQL语境

[DbConfigurationType(typeof(MySqlEFConfiguration))] 
public class ZipCodeContext : DbContext 
{ 
    public DbSet<ZipCode> ZipCodes { get; set; }   
} 

我正常的语境

public class MyContext : DbContext 
{ 
    public DbSet<MyClass> MyClasses{get;set;} 
} 

,最后我的web配置为实体框架部分

<entityFramework> 
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> 
<providers> 
    <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" /> 
    <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
</providers> 

我希望这是很清楚的,我m把我的头撞在桌子上

+0

你有没有设法解决这个问题? – James

+0

负面的@詹姆斯,从来没有设法弄清楚。我最终只使用普通的MySql连接并从那里执行查询。 – tympaniplayer

+0

谢谢你的跟进,我会告诉你,如果我设法得到这个 – James

回答

1

我的Uow.cs有2个不同的上下文作为变量。因此,在对象初始化过程中,即使我只对第二个上下文感兴趣,第一个上下文的DbConfiguration也会默默应用。因此,第二个上下文在我改变设计之前已经用相同的错误进行了响应。

更新

更多细节 - 我已经更新为使用Oracle和MS SQL版本相同的上下文中的代码。为了提供对应的数据库配置,我在与上下文相同的程序集中添加了自定义配置类,并将它与DbConfigurationType属性一起使用。你的情况可能是这样的:

public class CustomDbConfiguration : DbConfiguration 
{ 
    public CustomDbConfiguration() 
    { 
     if (DbChecker.MySqlInUse) 
      SetConfiguration(new MySqlEFConfiguration()); 
    } 
} 

和两种情况下尝试应用它

[DbConfigurationType(typeof(CustomDbConfiguration))] 
public class ZipCodeContext : DbContext 
{ 
    public DbSet<ZipCode> ZipCodes { get; set; } 
} 

[DbConfigurationType(typeof(CustomDbConfiguration))] 
public class MyContext : DbContext 
{ 
    public DbSet<MyClass> MyClasses { get; set; } 
} 
+1

也添加一些代码... –

0

FYIW - 我有同样的问题。解决问题的唯一方法是在我的程序执行开始时添加以下代码。

var needsToBeInstantiated = new EFDBContextConfiguration(); 
EFDBContextConfiguration.SetConfiguration(needsToBeInstantiated); 
相关问题