Entity Framework是否一次支持多个ORM数据库?

时间:2017-09-08 12:25:08

标签: .net asp.net-mvc entity-framework entity-framework-6

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

<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 个答案:

答案 0 :(得分: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并为Ms 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
        }    
    }    
}

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