大家好!我們在NET+EF+MVC開發項目的時候(筆者用的.NET+MVC+EF6,VS2019開發,資料庫是sqlserver2019),經常會使用微軟的sqlserver資料庫,但有時候客戶要求需要使用mysql開源資料庫,這個如何在不改變源代碼的情況下順利切換呢?筆者經過大量嘗試,隻需要少量的配置,更改核心代碼就可以平滑切換,下面将操作步驟詳細介紹出來,希望對各位有所幫助!
一、機器需要先安裝mysql5.7版本(目前大多用這個版本),将sqlserver資料庫遷移到mysql資料庫中,這個過程很簡單,用Navicat 可以直接遷移,如圖所示選擇導入功能,可能會調整一些特殊字段,工作量很小。
二、工程中各個項目中都添加引用,如何引用,用Nuget下載下傳
三、配置實體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資料庫更新實體了
五、實體更新完成後,比如在背景項目中需要配置web.confg和Global.asax這二個檔案,一個是邊接資料庫相關配置,一個是配置增删改查 ,要不資料庫隻能增加,不能更新和删除操作。
1、web.confg相關節點配置和資料庫的連接配接串如下:
<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檔案配置如下(非常重要):
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資料庫自由切換!