2017-09-08 81 views
-2

实体框架是否支持多个数据库?我的解决方案中有两个数据库,分别为MySQLSQL Server。如果我一次运行一个,它正在工作,但两者同时不工作。这里是代码。在实体框架web config我需要添加另一个设置为MySQL,但如何?实体框架一次是否支持多个ORM数据库?

<entityFramework> 
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework"> 
    <parameters> 
    <parameter value="System.Data.SqlServerCe.4.0" /> 
    </parameters> 
    </defaultConnectionFactory> 
    <providers> 
    <provider invariantName="System.Data.SqlServerCe.4.0" type="System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact" /> 
</providers> 
</entityFramework> 
+1

答案是肯定的,不是。它支持多个数据库,但是你不会有一个单独的DbContext来传递你拥有的两种类型的数据库。你必须用它们的连接字符串建立两个上下文(我建议把它们放在分开的项目中),你可以在你的业务逻辑中实例化两个上下文。 – SayusiAndo

+0

但是在这里创建问题。如何在这里添加mysql和sql server连接设置@ SayusiAndo –

+0

这就是为什么我写了你需要一个项目你的MySQL的东西,另一个用于MS SQL。这两个项目都会有它的app.config,您可以在其中定义所需的connectionFactory。 – SayusiAndo

回答

0

创建具有3个项目的解决方案: MsSQLContext MySQLContext BusinessLogic

MsSQLContext项目

安装EF和设置以下MySQL documentation连接字符串。

<connectionStrings> 
    <clear /> 
    <add name="MySqlContext" providerName="MySql.Data.MySqlClient" 
     connectionString="server=localhost;port=3306;database=mycontext;uid=root;password=********"/> 
</connectionStrings> 

添加一个类并给出一个有意义的名称。

public class MyBusinessContextWithMySQL : DbContext 
    { 
     public MyBusinessContextWithMySQL() : base("name=MySqlContext") 
     { 
      this.DisableLazyLoad(); 
     } 

    // Add your entities and mappings here 
    } 

MySQLContext项目

安装EF和设置在缺省情况下提供了SQL女士的连接字符串。给它一个名字,你会有类似如下:

<connectionStrings> 
    <clear /> 
    <add name="MSSQLContext" connectionString="...valid conn string..." /> 
    </connectionStrings> 

添加一个类,并给它一个有意义的名称。

public class MyBusinessContextWithMSSQL : DbContext 
    { 
     public MyBusinessContextWithMSSQL() : base("name=MSSQLContext") 
     { 
      this.DisableLazyLoad(); 
     } 

    // Add your entities and mappings here 
    } 

BusinessLogic项目

安装EF,并添加两个连接字符串App.config文件。你会这样:

<connectionStrings> 
     <clear /> 
     <add name="MSSQLContext" connectionString="...valid conn string..." /> 
     <add name="MySqlContext" providerName="MySql.Data.MySqlClient" connectionString="server=localhost;port=3306;database=mycontext;uid=root;password=********"/> 
     </connectionStrings> 

创建一个包含您的业务逻辑的类。添加上述两个项目作为此项目的参考。在你实现业务逻辑的类中,你可以访问两个类似于下面的语境(代码是我的头顶,并且没有检查它是否正确)。

public class BusinessLogic{ 

    public void SomeMethod() { 

     // doing stuff with data in MS SQL 
     using(MyBusinessContextWithMSSQL msSqlContext = new MyBusinessContextWithMSSQL()) { 
      // your business logic 
     } 

     // doing stuff with data in MySQL 
     using(MyBusinessContextWithMySQL msSqlContext = new MyBusinessContextWithMySQL()) { 
      // your business logic 
     }  
    }  
} 

这是管理两个数据库中数据的一种方法。它有自己的成本,例如:您必须维护两组实体(我假设您在两个实体中都有相同的数据)。

相关问题