ABP (.Net Core 3.1版本) 使用MySQL數據庫遷移啟動模板項目(1)

最近要搭建新項目,因為還沒有用過.net core,所以想用.net core的環境搭建新項目,因為不熟悉.net core的架構,所以就下載了abp項目先了解一下。
但是自己太菜了,下載了模板項目,在啟動的過程中一波三折,其曲折真是無法用言語形容。(但是我沒有灰心!沒有什麼技術是在努力的情況下學不會的,是嘛)
在搜集信息的過程中,很多網友分享的資料都很有幫助,但是有一個問題的方法對於我這邊遇到的問題卻用不上,因為問題沒有得到解決。但是卻給了我不同的思路,從而讓問題得到解決,模板項目終於順利啟動。

先貼上我參考的帖子,正是因為有優秀的網友的分享,我才打開了abp模板項目的大門!(不多說了,遠程握手為敬吧,哈哈)

參考資料

ABP入門教程(一)啟動模版項目

ABP (.Net Core) 使用MySQL數據庫

按照參考資料的操作,只需要簡單幾步就可以把模板項目啟動起來,但是!不知道為何,任何新鮮的技術到了我這裏,就要費上N個步驟,花費九牛二虎之力,絞盡腦汁都還是一堆紅色報錯,滿屏紅讓我沮喪,讓我懷疑人生……

emmmm直接開始從步驟說起吧。

  1. abp模板下載

    abp模板下載

  2. VS2019打開項目解決方案(用VS2017應該也可以,不過要額外下載.net sdk 3.0安裝。)

  3. 找到【解決方案名.Web.Host】項目裏面的appsettings.json,修改數據庫連接字符串
    因為我本地的sqlserver沒有連接成功,缺配置工具,沒有選擇重裝。改換mysql配置。所以我的配置是

    "ConnectionStrings": { "Default": "server=localhost;uid=root;pwd=123;port=3306;database=ExtraModuleDb;" }

  4. 在【解決方案名.EntityFrameworkCore】用Nuget添加安裝引用(也可以參考上面的第二個鏈接,用命令執行)

    install-package pomelo.entityframeworkcore.mysql.design

    install-package pomelo.entityframeworkcore.mysql

  5. 在【解決方案名.EntityFrameworkCore】裏面找到DbContextConfigurer文件,修改數據庫配置連接

     `public static void Configure(DbContextOptionsBuilder<KYKWMSExtraModuleDbContext> builder, string connectionString)
     {
         builder.UseMySql(connectionString);
     }
    
     public static void Configure(DbContextOptionsBuilder<KYKWMSExtraModuleDbContext> builder, DbConnection connection)
     {
         builder.UseMySql(connection);
     }`
    
  6. 數據遷移

    最好先刪除【解決方案名.EntityFrameworkCore】下的【Migration】文件夾

    然後將【解決方案名.Web.Host】設為啟動項目,在程序包管理器控制台(Nuget控制台)里設定默認項目為EntityFrameworkCore。

    在程序包管理器控制台輸入命令: Add-Migration Init

    生成成功,會看到【解決方案名.EntityFrameworkCore】下的【Migration】文件夾下面多了三個文件。

    然後更新數據庫,abp會自動建庫。在程序包管理器控制台輸入命令: Update-Database -Verbose

    到了這裏呢,問題就來了,我正是被這個問題困擾了一個上午。

    好熟悉的錯誤:You have an error in your SQL syntax

    肉眼可見,datetime那裡帶了一個長度,而在mysql語句創建表的時候,datetime類型是不允許帶長度的。

    於是我的做法就是,手動把代碼裏面datetime(6)全部替換成datetime,再次在程序包管理器控制台輸入命令: Update-Database -Verbose

    但得到的結果仍然是You have an error in your SQL syntax。反覆操作 Add-Migration Init Update-Database -Verbose 后,依然沒辦法解決這個問題,我有一點無奈,同時有一點不甘心。我可是個老鳥啊,遇到未知的問題,解決問題的方式就只能是坐着嘆氣了么?! (肯定不是!)

    午休睡了一覺,下午起來接着解決這個問題。我看了一下,為什麼是添加 pomelo.entityframeworkcore.mysql 引用呢?這個產商不是官方Oracle的呢。以前的項目不都是添加MySql.Data嗎?帶着這個疑惑,於是我就嘗試着換 MySql.Data 去添加引用,添加引用的時候,發現它有一個EntityFrameworkCore的版本: MySql.Data.EntityFrameworkCore ,於是把兩個都安裝上。(一定是要兩個都安裝,只安裝 MySql.Data 是不完整的,至少在數據庫配置鏈接出錯的時候,是沒有提示,不知道應該改成UseMySQL才可用)

安裝好后,運行發現有報錯,原來數據庫配置連接裏面的MySql要大寫的才對。(其實報錯的時候會很疑惑,明明是MySql啊,為什麼不支持了呢?也不知道是要改大寫,把鼠標放上去選擇修復的時候,就變成大寫,錯誤就消失了。)

就這樣編譯成功!說明用官方的包也是可以用的!

接着重新重複第6步的命令:

刪除【Migration】文件夾下面的文件,在程序包控制台執行命令:

Add-Migration Init

Update-Database -Verbose

好了!看到表成功的在創建!

但是,不能開心太早!問題又來了!

字符串的長度太長了,最後一句提示varchar max length=65535。我還不知道這些代碼是怎麼生成的,要怎麼把最基礎的代碼改掉才不至於報低級的錯誤。所以在這裏我解決的方法就是手動去把【Migration】文件夾下面的文件,超出數據類型長度的全部手動修改。第一次沒有改全的,報一次錯改一次,後面基本都是數據類型長度超出的問題。全部改好了,再 Update-Database,最終數據庫成功創建好,項目也運行起來了。

emmmm,前端的因為還不太熟悉這種分離式的項目,vue.js還跑不起來,看不到整個項目的全貌。這裏就作為第一部分結束先。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

※教你寫出一流的銷售文案?

您可能也會喜歡…