當前位置:
首頁 > 最新 > ASP.NET Core MVC+EF Core從開發到部署

ASP.NET Core MVC+EF Core從開發到部署

筆記本電腦裝了雙系統(Windows 10和Ubuntu16.04)快半年了,平時有時間就喜歡切換到Ubuntu系統下耍耍Linux,熟悉熟悉Linux命令、Shell腳本以及Linux下的各種應用的安裝、配置、運行。使用下來的感受是Linux確實相當好使,熟悉基本操作之後的工作的效率提升不是一星半點,況且現在Linux的使用面已經相當廣泛,隨著.NET的跨平台戰略的落地實施(.NET Core),.NET程序員也很有必要熟悉Linux下的.NET開發。因此這篇博客,我們就講解一下ubuntu下的asp.net core mvc開發。

一、準備工作

首先介紹一下我的開發環境:

1、操作系統:ubuntu 16.04

ubuntu是目前主流的linux桌面系統,官方網站:https://www.ubuntu.com/download。

2、開發工具:vscode 1.22.2

vscode(visual studio code,簡稱vscode)是微軟提供的跨平台的代碼編輯器,可以通過安裝擴展支持多種編程語言(C#、C++、Python、Node.js等等)。如果你覺得vs太重,可以試試這個輕量級的vscode,官方網站:https://code.visualstudio.com/。

3、運行環境:.net core 2.1

.net core是微軟官方出的.net的跨平台版本,我們開發跨平台的web應用,使用的asp.net core mvc需要安裝.net core運行環境,官方網站:https://dotnet.github.io/

4、資料庫:mysql 5.7

mysql不用多介紹了,資料庫領域三巨頭(oracle、mysql、sqlserver)之一,免費開源的跨平台資料庫。自帶的MySQL Workbench可以非常方便的操作mysql。據說微軟的sqlserver也推出了linux版,以後有機會再試一試。官方網站:https://www.mysql.com/。

5、web server:jexus 5.8.3

我們開發好的asp.net core mvc應用發布後,需要一個web server提供運行環境,jexus就是linux下免費開源的asp.net web server。這裡無需對jexus多做介紹,詳細的內容可以去官方網站:https://www.jexus.org/查詢。

怎麼安裝如上的環境,這裡限於篇幅,不重點介紹。相信讀者根據官方文檔(一定要仔細查閱)或者百度就可以順利完成上述環境的準備。我們這篇博客的目標就是在ubuntu下,使用vscode開發asp.net core應用,並通過ef core完成數據的持久化,資料庫使用免費開源跨平台的mysql,最終將發布好的asp.net core mvc應用在jexus里承載,並讓jexus隨機啟動,這樣我們一啟動好電腦,就能打開我們的asp.net core mvc應用了。

關於本次項目案例,這裡我選擇一個現成的方案——參會報名應用,它來自於《Pro Entity Framework Core 2 for ASP.NET Core MVC》這本書,網上有免費電子英文版。這裡也順便推薦一下這本書,這本書的特點就是為初學者準備了幾個簡要的開發案例,配備詳細的實現步驟和截圖,學習體驗非常好(這裡不得不佩服國外人寫的教程)。

二、使用vscode開發asp.net core應用

在ubuntu中,按ctrl+alt+t快捷鍵,打開控制台,輸入dotnet --version命令,查看.net core版本,確保正確安裝。

然後我們輸入dotnet new mvc命令,創建asp.net core mvc應用。

看到如上顯示的Restore succeeded即創建成功。

然後我們使用vscode打開這個目錄,可以看到如下圖所示的項目目錄結構。

如果有提示,要你安裝C#擴展,點擊Yes安裝即可。

從截圖可以看到,通過vscode為我們展示的asp.net core mvc的項目結構非常清晰。Controller對應控制器,Models對應模型類,Views對應視圖,wwwroot存放一些靜態資源,包括js、css、img、lib(bootstrap、jquery)。幾個配置文件都是json格式的文件,熟悉json的也沒什麼問題。還有1個csproj文件,普通的C#項目都會有這個文件。還有兩個cs文件,分別為Program.cs和Startup.cs,其中Program.cs中的Main方法是程序的運行入口,Startup.cs是項目啟動時的一些配置信息,比如添加mvc支持,路由的設置等等。

vscode中看到的asp.net net core應用就是一個完整可運行的版本。我們在vscode中,打開Program.cs文件,在BuildwebHost方法中,加上一行代碼:

WebHost.CreateDefaultBuilder(args) .UseStartup().UseUrls(new string[]{"http://localhost:5001","http://localhost:5002"}).Build();

然後在vscode界面下,按ctrl+f5快捷鍵(或者點擊vscode菜單欄中的Debug-Start Without Debugging)直接運行該項目,即可訪問我們創建的asp.net core應用。

默認url是:localhost:5001,localhost:5002也可以訪問,這就是我們通過添加了UseUrls方法後所起到的作用。

此時的vscode狀態截圖如下:

我們通過中間的導航欄可以看到,此時的vscode處於運行狀態,我們可以通過快捷鍵shift+f5或者點擊紅色方塊按鈕,停止項目運行。

或者切換到asp.net core的項目目錄下,輸入dotnet run命令,啟動運行asp.net core項目。

三、添加EF Core

在vscode項目中使用EF Core連接mysql,需要添加引用Microsoft.EntityFrameworkCore和MySql.Data.EntityFrameworkCore包。

MySql.Data.EntityFrameworkCore包安裝方式也是一樣。安裝好之後vscode右下角會提示要Restore項目,點擊Restore即可。

這樣,我們就可以為UseMySQL方法引入namespace了。

注意:關於該程序的具體代碼,這裡不再詳細給出,本文最後會放出該項目的完整代碼。

開發完畢後,我們可以打開控制台,切換到asp.net core的目錄下,用ef core命令生成資料庫。

輸入的命令為:dotnet ef migrations add Initial,但卻發生如下的錯誤提示:

這個錯誤提示就是沒有找到匹配的dotnet ef命令。我們打開項目的csproj文件,加入如下的配置信息。

編輯後的完整配置信息如下:

我們在控制台再次執行dotnet ef migrations add Initial命令。又出錯了,錯誤截圖如下:

錯誤提示信息:不能將concretetypemapping轉換為relationaltypemapping類型。感覺應該是Microsoft.EntityFrameworkCore的版本較高,API寫法進行了調整,需要寫新的類型轉換代碼。這個問題先放一放,後面有時間再研究一下。網上百度了一番,說是Microsoft.EntityFrameworkCore的版本過高,我們用的是2.1.1版本,降低到2.0.2版本即可。

同樣的操作,vscode菜單欄-view-command palette-Nuget Package Manager:Add Package,輸入Microsoft.EntityFrameworkCore,按回車。選擇版本2.0.2版本,自動添加引用。最終修改後的csproj文件如下:

netcoreapp2.0

再次執行ef core遷移命令,這次終於成功了。

這時我們回到vscode編輯器,看到項目中已經多了一個Migrations文件夾。

回到控制台界面,輸入:dotnet ef database update命令。

可以看到已經通過ef core成功的在mysql中創建了資料庫和表。我們打開mysql workbench,看看資料庫test中的內容。

OK!至此開發方面的問題就都解決好了。只差最後一步,將我們的項目發布,並host在web server中了。

四、發布、部署

發布asp.net core mvc項目很簡單,通過publish命令就可以了。我們可以先新建一個目錄,以便將文件發布到該路徑。

發布命令:dotnet publish -o /home/guwei4037/webapp,這樣就將項目發布到了/home/guwei4037/webapp路徑中。

項目發布完成之後,我們需要將該項目部署到jexus中。

我們將jexus放入到/usr/jexus目錄中。然後編輯/usr/jexus/siteconf里的default文件內容。

####################### Web Site: Default ########################################port=80root=/ /home/guwei4037/webapp# hosts=* #OR your.com,*.your.com# reproxy=/ http://localhost:5000/# addr=0.0.0.0# CheckQuery=false

NoLog=trueAppHost=

# NoFile=/index.php# Keep_Alive=false# UseGZIP=false# UseHttps=true# ssl.certificate=/x/xxx.crt #or pem# ssl.certificatekey=/x/xxx.key# ssl.protocol=TLSv1.0 # TLSv1.1 or TLSv1.2# ssl.ciphers=# AppHost.Port=5000# AppHost=# DenyFrom=192.168.i0.233, 192.168.1.*, 192.168.2.0/24# AllowFrom=192.168.*.*# DenyDirs=~/cgi, ~/upfiles# indexes=myindex.aspx# rewrite=^/.+?.(asp|php|cgi|pl|sh)$ /index.aspx# reproxy=/bbs/ http://192.168.1.112/bbs/# host.Redirect=abc.com www.abc.com 301# ResponseHandler.Add=myKey:myValue# Jexus php fastcgi address is "/var/run/jexus/phpsvr"######################################################## fastcgi.add=php|socket:/var/run/jexus/phpsvr# php-fpm listen address is "127.0.0.1:9000"############################################# fastcgi.add=php|tcp:127.0.0.1:9000

指定port埠號為80埠,root為/根目錄,後面的/home/guwei4037/webapp為項目的發布路徑,中間有1個空格隔開。NoLog=true意為不記錄日誌,這樣網站訪問速度會比較快,缺點是沒有記錄日誌,遇到問題不能根據日誌信息很快定位。AppHost=,其中cmd指定程序運行方式,後面的路徑為啟動的文件,root為根目錄,port配置支持多埠。

jexus配置好了,並且也重新啟動了。我們就可以打開localhost看看應用訪問是否正常。

可以正常打開了。

趕緊使用一下裡面的功能呢,都是OK的。

jexus已經成功的host了我們的應用,那麼最後一步,如何讓jexus隨機啟動呢?在jexus的安裝配置要點(https://www.linuxdot.net/bbsfile-3084)裡面已經給出了答案:

開機自動啟動:

在/etc/rc.local 或類試的開機啟動腳本中加入下面這一行命令:

mono /usr/jexus/jws.exe >/dev/null 2>&1 &

或者

/usr/jexus/jws.start #推薦方式

由於我們引用了bootstrap,在ubuntu下用ifconfig命令查看一下本機的ip,然後用你的手機瀏覽器輸入這個ip就可以在手機上面註冊參會了。

參考資料:

1、徹底解決mysql中文亂碼

2、jexus安裝配置要點

3、asp.net core發布和部署

4、Table "db.__EFMigrationsHistory" doesn"t exist

5、Creating a Database with Code First in EF Core

原文地址:https://www.cnblogs.com/guwei4037/p/9197887.html


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 dotNET跨平台 的精彩文章:

Microsoft Graph:連接每個應用都需要的基礎數據

TAG:dotNET跨平台 |