天天看點

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資料庫自由切換!