实体框架一次是否支持多个ORM数据库?
问题描述:
实体框架是否支持多个数据库?我的解决方案中有两个数据库,分别为MySQL
和SQL Server
。如果我一次运行一个,它正在工作,但两者同时不工作。这里是代码。在实体框架web config
我需要添加另一个设置为MySQL,但如何?实体框架一次是否支持多个ORM数据库?
<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>
答
创建具有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和设置在缺省情况下提供了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
}
}
}
这是管理两个数据库中数据的一种方法。它有自己的成本,例如:您必须维护两组实体(我假设您在两个实体中都有相同的数据)。
答案是肯定的,不是。它支持多个数据库,但是你不会有一个单独的DbContext来传递你拥有的两种类型的数据库。你必须用它们的连接字符串建立两个上下文(我建议把它们放在分开的项目中),你可以在你的业务逻辑中实例化两个上下文。 – SayusiAndo
但是在这里创建问题。如何在这里添加mysql和sql server连接设置@ SayusiAndo –
这就是为什么我写了你需要一个项目你的MySQL的东西,另一个用于MS SQL。这两个项目都会有它的app.config,您可以在其中定义所需的connectionFactory。 – SayusiAndo