使用MySQL& MSSQL用于两个具有Entity Framework的不同数据库

时间:2014-05-07 10:01:15

标签: mysql sql-server entity-framework

我正在尝试构建一个web api,它提供来自MySQL数据库或MSSQL数据库(完全不同的数据和架构)的数据。它还提供了一些在两者之间移动数据的端点。我已经创建了两个类库来保存两个数据库的EF模型,并且已成功连接到两个实例并针对两个实例运行查询。它倒下的地方是试图访问它们。我必须调整web.config entityFramework部分以使其工作,我无法得到它,以便两者有效地同时工作。我正在使用EF6和最新的MySQL连接器。

这是MSSQL实体的工作配置:

<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
  <parameters>
    <parameter value="v11.0" />
  </parameters>
</defaultConnectionFactory>
<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>

这是我尝试使用MySQL实体上下文时产生的错误

The default DbConfiguration instance was used by the Entity Framework before the 'MySqlEFConfiguration' type was discovered. An instance of 'MySqlEFConfiguration' must be set at application start before using any Entity Framework features or must be registered in the application's config file. See http://go.microsoft.com/fwlink/?LinkId=260883 for more information.

这是MySQL实体的工作配置:

<entityFramework codeConfigurationType="MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6">
<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" />  

然后抱怨连接字符串尝试使用MySQL库。我在网上找不到这个问题,这里的问题很相似,但没有答案:Is it possible to have a EF Context for MySql and SqlServer?

有没有人这样做或知道解决问题的方法?

4 个答案:

答案 0 :(得分:3)

要解决此错误,请将其放在我的App.config上:“codeConfigurationType”

<entityFramework codeConfigurationType="MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6">

为什么呢?可能配置不是伪造MySqlEFConfiguration的位置。

我在这里使用只有Mysql 我不知道这是否适用于SQLServer和Mysql togueter。

对于您的问题,此链接非常有用:Link

你可以有2个separeted configuration.cs文件。一个用于 MySql ,另一个用于 MSSQL

答案 1 :(得分:1)

在撰写此版本6.9.1时,问题似乎已在beta MySQL连接器中得到解决。我现在有两个并排运行没有任何问题。

<强>更新

为了澄清我的设置是EF5(EF6赢得了工作)和MySQL连接器版本6.9.1(测试版)。我的web.config部分如下所示:

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

模型位于同一个项目中,我再次遇到类库的问题。

答案 2 :(得分:0)

我有同样的问题。我在我的代码第一个项目中使用迁移,其中有两个db上下文用于mysql和mssql。问题是因为EF6尝试在配置文件中或在db上下文所在的同一程序集中查找数据库配置。对于mysql迁移,我使用继承自DbContext的MySqlHistoryContext。在db初始化阶段,EF6创建MySqlHistoryContext的实例并找到MySqlEFConfiguration类型并尝试使用它。 我找到了两种解决问题的方法。第一种是通过使用null参数调用Database.SetInitializer来禁用迁移检查。第二个是继承自我自己的程序集中的MySqlHistoryContext。第二个似乎对我有用。

答案 3 :(得分:0)

我追踪了我在SO和其他地方找到的所有解决方案,对我来说,问题原来是我的MSSQL连接字符串。

之前:

<add name="DefaultConnection" providerName="System.Data.SqlClient" connectionString="Server=serverName/instance;Database=PublicWebsite;Integrated Security=True;" />

后:

<add name="DefaultConnection" providerName="System.Data.SqlClient" connectionString="Data Source=serverName/instance;Initial Catalog=PublicWebsite;Integrated Security=True;" />

“之前”连接字符串适用于EF。在我们为EF引入MySQL(在不同的类库中)之后出现了这个问题。

要明确的是,在MSSQL中我们刚刚将“服务器”更改为“数据源”的连接字符串,我们将“数据库”更改为“初始目录”。