在 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