【问题标题】:Does Entity Framework supports multiple ORM databases at a time?Entity Framework 是否一次支持多个 ORM 数据库?
【发布时间】:2017-09-08 12:25:08
【问题描述】:

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>

【问题讨论】:

  • 答案是肯定的和否定的。它支持多个数据库,但您不会有一个 DbContext 与您拥有的两种类型的数据库进行通信。您必须使用它们的连接字符串构建两个上下文(我建议将它们放在单独的项目中),并且您可以在业务逻辑中实例化这两个上下文。
  • 在这里创建问题。如何在此处添加 mysql 和 sql server 连接设置。@SayusiAndo
  • 这就是为什么我写了你需要一个项目来处理你的 MySQL 东西和另一个用于 MS SQL 的项目。这两个项目都有它的 app.config,您可以在其中定义所需的 connectionFactory。

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


【解决方案1】:

创建一个包含 3 个项目的解决方案: MsSQL上下文 MySQL上下文 业务逻辑

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
    }

业务逻辑项目

安装 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
        }    
    }    
}

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

【讨论】:

    猜你喜欢
    • 2019-09-16
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 2012-08-02
    • 2013-10-14
    • 1970-01-01
    相关资源
    最近更新 更多