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

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

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

我有两个连接字符串。

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

但我无法做到这一点。

有什么想法吗?

【问题讨论】:

    标签: mysql sql-server entity-framework-6


    【解决方案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 文件),因此生成的代码是不同的。它有效。
    猜你喜欢
    • 2014-08-29
    • 2017-10-12
    • 2014-01-20
    • 1970-01-01
    • 2017-09-30
    • 2014-11-07
    • 2014-06-24
    • 2017-08-05
    • 1970-01-01
    相关资源
    最近更新 更多