日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.NET Core MVC+EF Core从开发到部署

發(fā)布時間:2023/12/4 asp.net 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET Core MVC+EF Core从开发到部署 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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

一、準(zhǔn)備工作

首先介紹一下我的開發(fā)環(huán)境:

1、操作系統(tǒng):ubuntu 16.04?

ubuntu是目前主流的linux桌面系統(tǒng),官方網(wǎng)站:https://www.ubuntu.com/download。

2、開發(fā)工具:vscode 1.22.2

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

3、運(yùn)行環(huán)境:.net core 2.1

.net core是微軟官方出的.net的跨平臺版本,我們開發(fā)跨平臺的web應(yīng)用,使用的asp.net core mvc需要安裝.net core運(yùn)行環(huán)境,官方網(wǎng)站:https://dotnet.github.io/

4、數(shù)據(jù)庫:mysql 5.7

mysql不用多介紹了,數(shù)據(jù)庫領(lǐng)域三巨頭(oracle、mysql、sqlserver)之一,免費(fèi)開源的跨平臺數(shù)據(jù)庫。自帶的MySQL Workbench可以非常方便的操作mysql。據(jù)說微軟的sqlserver也推出了linux版,以后有機(jī)會再試一試。官方網(wǎng)站:https://www.mysql.com/。

5、web server:jexus 5.8.3

我們開發(fā)好的asp.net core mvc應(yīng)用發(fā)布后,需要一個web server提供運(yùn)行環(huán)境,jexus就是linux下免費(fèi)開源的asp.net web server。這里無需對jexus多做介紹,詳細(xì)的內(nèi)容可以去官方網(wǎng)站:https://www.jexus.org/查詢。

怎么安裝如上的環(huán)境,這里限于篇幅,不重點(diǎn)介紹。相信讀者根據(jù)官方文檔(一定要仔細(xì)查閱)或者百度就可以順利完成上述環(huán)境的準(zhǔn)備。我們這篇博客的目標(biāo)就是在ubuntu下,使用vscode開發(fā)asp.net core應(yīng)用,并通過ef core完成數(shù)據(jù)的持久化,數(shù)據(jù)庫使用免費(fèi)開源跨平臺的mysql,最終將發(fā)布好的asp.net core mvc應(yīng)用在jexus里承載,并讓jexus隨機(jī)啟動,這樣我們一啟動好電腦,就能打開我們的asp.net core mvc應(yīng)用了。

關(guān)于本次項目案例,這里我選擇一個現(xiàn)成的方案——參會報名應(yīng)用,它來自于《Pro Entity Framework?Core 2 for ASP.NET?Core MVC》這本書,網(wǎng)上有免費(fèi)電子英文版。這里也順便推薦一下這本書,這本書的特點(diǎn)就是為初學(xué)者準(zhǔn)備了幾個簡要的開發(fā)案例,配備詳細(xì)的實(shí)現(xiàn)步驟和截圖,學(xué)習(xí)體驗(yàn)非常好(這里不得不佩服國外人寫的教程)。

?

你必須掌握的Entity Framework 6.x與Core 2.0

作者:汪鵬

當(dāng)當(dāng) 廣告 購買

二、使用vscode開發(fā)asp.net core應(yīng)用

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

然后我們輸入dotnet new mvc命令,創(chuàng)建asp.net core mvc應(yīng)用。

看到如上顯示的Restore succeeded即創(chuàng)建成功。

然后我們使用vscode打開這個目錄,可以看到如下圖所示的項目目錄結(jié)構(gòu)。

如果有提示,要你安裝C#擴(kuò)展,點(diǎn)擊Yes安裝即可。

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

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

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

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

?





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

此時的vscode狀態(tài)截圖如下:

我們通過中間的導(dǎo)航欄可以看到,此時的vscode處于運(yùn)行狀態(tài),我們可以通過快捷鍵shift+f5或者點(diǎn)擊紅色方塊按鈕,停止項目運(yùn)行。

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

?

三、添加EF Core

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

點(diǎn)擊菜單欄-View-Command Palette-Nuget Package Manager:Add Package,輸入Microsoft.EntityFrameworkCore,按回車。選擇版本,自動添加引用。?

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

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

注意:關(guān)于該程序的具體代碼,這里不再詳細(xì)給出,本文最后會放出該項目的完整代碼。

開發(fā)完畢后,我們可以打開控制臺,切換到asp.net core的目錄下,用ef core命令生成數(shù)據(jù)庫。

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

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

<ItemGroup> <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.0" /> <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" /> </ItemGroup>

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

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

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

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

<Project Sdk="Microsoft.NET.Sdk.Web"><PropertyGroup><TargetFramework>netcoreapp2.0</TargetFramework></PropertyGroup><ItemGroup><PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.6"/><PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.0.2"/><PackageReference Include="MySql.Data.EntityFrameworkCore" Version="8.0.11"/></ItemGroup><ItemGroup><DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.3"/></ItemGroup><ItemGroup><DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.0"/><DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0"/></ItemGroup></Project>

再次執(zhí)行ef core遷移命令,這次終于成功了。

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

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

可以看到已經(jīng)通過ef core成功的在mysql中創(chuàng)建了數(shù)據(jù)庫和表。我們打開mysql workbench,看看數(shù)據(jù)庫test中的內(nèi)容。

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

?

四、發(fā)布、部署

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

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

項目發(fā)布完成之后,我們需要將該項目部署到j(luò)exus中。

我們將jexus放入到/usr/jexus目錄中。然后編輯/usr/jexus/siteconf里的default文件內(nèi)容。

###################### # 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=true AppHost={cmd=dotnet /home/guwei4037/webapp/firstcore.dll;root=/home/guwei4037/webapp;Port=5001,5002}
# 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={cmd=dotnet /var/www/default/your.dll; root=/var/www/default; port=5000}# 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為項目的發(fā)布路徑,中間有1個空格隔開。NoLog=true意為不記錄日志,這樣網(wǎng)站訪問速度會比較快,缺點(diǎn)是沒有記錄日志,遇到問題不能根據(jù)日志信息很快定位。AppHost={cmd=dotnet /home/guwei4037/webapp/firstcore.dll;root=/home/guwei4037/webapp;port=5001,5002},其中cmd指定程序運(yùn)行方式,后面的路徑為啟動的文件,root為根目錄,port配置支持多端口。

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

可以正常打開了。

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

?

?

?

jexus已經(jīng)成功的host了我們的應(yīng)用,那么最后一步,如何讓jexus隨機(jī)啟動呢?在jexus的安裝配置要點(diǎn)(https://www.linuxdot.net/bbsfile-3084)里面已經(jīng)給出了答案:

開機(jī)自動啟動:
在/etc/rc.local?或類試的開機(jī)啟動腳本中加入下面這一行命令:
mono?/usr/jexus/jws.exe?>/dev/null?2>&1?&
或者
/usr/jexus/jws.start??#推薦方式

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

?

參考資料:

1、徹底解決mysql中文亂碼

2、jexus安裝配置要點(diǎn)

?3、asp.net core發(fā)布和部署

?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

.NET社區(qū)新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com

總結(jié)

以上是生活随笔為你收集整理的ASP.NET Core MVC+EF Core从开发到部署的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。