天天看点

NET+EF+MVC项目如何将sqlserver数据库切换成mysql数据库

作者:娱乐一分哥

大家好!我们在NET+EF+MVC开发项目的时候(笔者用的.NET+MVC+EF6,VS2019开发,数据库是sqlserver2019),经常会使用微软的sqlserver数据库,但有时候客户要求需要使用mysql开源数据库,这个如何在不改变源代码的情况下顺利切换呢?笔者经过大量尝试,只需要少量的配置,更改核心代码就可以平滑切换,下面将操作步骤详细介绍出来,希望对各位有所帮助!

一、机器需要先安装mysql5.7版本(目前大多用这个版本),将sqlserver数据库迁移到mysql数据库中,这个过程很简单,用Navicat 可以直接迁移,如图所示选择导入功能,可能会调整一些特殊字段,工作量很小。

NET+EF+MVC项目如何将sqlserver数据库切换成mysql数据库

二、工程中各个项目中都添加引用,如何引用,用Nuget下载

NET+EF+MVC项目如何将sqlserver数据库切换成mysql数据库
NET+EF+MVC项目如何将sqlserver数据库切换成mysql数据库

三、配置实体Model层中的App.Config

<connectionStrings><add name="InventoryEntities" connectionString="metadata=res://*/InventoryModel.csdl|res://*/InventoryModel.ssdl|res://*/InventoryModel.msl;provider=MySql.Data.MySqlClient;provider connection string="server=127.0.0.1;user id=root;password=sa123456;persistsecurityinfo=True;Character Set=utf8;database=test"" providerName="System.Data.EntityClient" /></connectionStrings>

<providers>

<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6"></provider>

</providers>

四、配置好后就可以从mysql数据库更新实体了

NET+EF+MVC项目如何将sqlserver数据库切换成mysql数据库

五、实体更新完成后,比如在后台项目中需要配置web.confg和Global.asax这二个文件,一个是边接数据库相关配置,一个是配置增删改查 ,要不数据库只能增加,不能更新和删除操作。

1、web.confg相关节点配置和数据库的连接串如下:

NET+EF+MVC项目如何将sqlserver数据库切换成mysql数据库

<add name="InventoryEntities" connectionString="metadata=res://*/InventoryModel.csdl|res://*/InventoryModel.ssdl|res://*/InventoryModel.msl;provider=MySql.Data.MySqlClient;provider connection string="server=127.0.0.1;user id=root;password=sa123456;persistsecurityinfo=True;Character Set=utf8;database=test"" providerName="System.Data.EntityClient" />

<add key="ConnectionString" value="server=127.0.0.1;database=test;uid=root;pwd=sa123456;charset=utf8;" />

<entityFramework>

<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">

<parameters>

<parameter value="mysqllocaldb" />

</parameters>

</defaultConnectionFactory>

<providers>

<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6"/>

</providers>

</entityFramework>

<system.data>

<DbProviderFactories>

<remove invariant="MySql.Data.MySqlClient" />

<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />

</DbProviderFactories>

</system.data>

2、Global.asax文件配置如下(非常重要):

NET+EF+MVC项目如何将sqlserver数据库切换成mysql数据库

public class MySqlDBconfiguration : MySqlEFConfiguration

{

public MySqlDBconfiguration()

{

SetExecutionStrategy(MySqlProviderInvariantName.ProviderName, () => new MySqlExecutionStrategy());

}

}

public class MvcApplication : System.Web.HttpApplication

{

protected void Application_Start()

{

EntityFramework.Locator.Current.Register<IBatchRunner>(() => new MySqlBatchRunner());

DbConfiguration.SetConfiguration(new MySqlDBconfiguration());

AreaRegistration.RegisterAllAreas();

FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);

RouteConfig.RegisterRoutes(RouteTable.Routes);

BundleConfig.RegisterBundles(BundleTable.Bundles);

//MVC4.0发布后部分CSS、js失效的解决办法

BundleTable.EnableOptimizations = false;

}

}

综上所述,实现这些操作步聚后,你的.net项目可以很方便的平滑的从sqlserver数据库迁移到mysql数据库上,你的代码一点也不用更改实现二个在sqlserver数据库和mysql数据库自由切换!