在 Entity Framework 6 中使用 MySQL 和 MSSQL

Posted

技术标签:

【中文标题】在 Entity Framework 6 中使用 MySQL 和 MSSQL【英文标题】:Use MySQL and MSSQL in Entity Framework 6 【发布时间】:2015-09-25 14:56:55 【问题描述】:

我正在开发一个网络服务。

这项服务背后有两种方法: 一个从 mysql 连接获取实体,另一个从 MSSQL Server 连接获取实体。

我有两个连接字符串。

我想要两个上下文,它们是完全分开的。

但我无法做到这一点。

有什么想法吗?

【问题讨论】:

【参考方案1】:

最终解决方案很简单。

请务必在所有目标系统上安装MySql Connector/Net! 我在目标平台上错过了这个。

web.config/app.config:

<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <connectionStrings>
    <add name="MsSqlServerContext" connectionString="MSSQLCONNECTIONSTRING" providerName="System.Data.SqlClient" />
    <add name="MySqlServerContext" connectionString="MYSQLCONNECTIONSTRING" providerName="MySql.Data.MySqlClient" />
  </connectionStrings>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />
    </providers>
  </entityFramework>
</configuration>

MsSqlServerContext.cs

public partial class MsSqlServerContext : DbContext

    public MsSqlServerContext()
        : base("name=MsSqlServerContext")
    
        Database.SetInitializer<MsSqlServerContext>(null);
    

    // Add DbSets here
    public DbSet<ClassName1> SomeName1  get; set; 
    public DbSet<ClassName2> SomeName2  get; set; 

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    
        // Add Mappings here
        modelBuilder.Configurations.Add(new ClassName1Map());
        modelBuilder.Configurations.Add(new ClassName2Map());
    

MySqlServerContext

public partial class MySqlServerContext : DbContext

    public MySqlServerContext()
        : base("name=MySqlServerContext")
    
        Database.SetInitializer<MySqlServerContext>(null);
    

    public DbSet<ClassName3> SomeName3  get; set; 
    public DbSet<ClassName4> SomeName4  get; set; 

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    
        modelBuilder.Configurations.Add(new ClassName3Map());
        modelBuilder.Configurations.Add(new ClassName4Map());
    

【讨论】:

我仍然收到“不支持关键字。参数名称:multipleactiveresultsets”与这些配置。不知何故,EF6 尝试使用 MySql 提供程序。 仔细检查拼写!我在打字问题上苦苦挣扎。查看 MySqlServerContext 和 MsSqlServerContext 的所有引用。那是我一开始的错 我已经通过使用 vs2010 创建 DB-First EF6 数据源解决了这个问题。它使用其他代码生成器(.edmx 而不是 t4 .tt 文件),因此生成的代码是不同的。它有效。

以上是关于在 Entity Framework 6 中使用 MySQL 和 MSSQL的主要内容,如果未能解决你的问题,请参考以下文章

实体未使用 Entity Framework 6 在数据库中更新

Entity Framework 6 Recipes 2nd Edition(11-9)译 -> 在LINQ中使用规范函数

在 Entity Framework 6 中使用 MySQL 和 MSSQL

使用 Entity Framework 6 创建计算属性

不能在 Entity Framework 6.1.3 和 PostgreSQL 中使用打开的事务

在 ASP.NET Core 中使用 Entity Framework 6