構建專案(Build):
目的:將原始程式碼轉換為執行的程式或應用程式。
過程:
編譯(Compile):將高階語言的原始碼轉換為機器碼。
連結(Link):將不同的編譯單元和函式庫組合成一個可執行檔。
壓縮(Packaging):可以建立壓縮包成某種分配格式,如安裝包或壓縮檔。
結果:產生一個或多個執行檔或可設定的軟體包。
執行專案(Run):
目的:在目標環境中運行已建立的應用程序,以測試或使用其功能。
過程:
啟動(Launch):載入並開始執行執行檔。
運行(Execute):程式依設計邏輯運行,可能需要與使用者互動或處理資料。
結果:應用程式在目標環境中運行,提供預期的功能或服務。
建立一個 MVC 與資料庫應用程式的過程可以分成幾個步驟,從設計、開發到部署。這裡將以 ASP.NET Core MVC 與 Entity Framework (EF) Core 搭配 SQL Server 資料庫作為範例。
環境設置
1.1. 安裝必要工具
.NET SDK: 下載並安裝最新版本的 .NET SDK 下載連結.
NET SDK (Software Development Kit)
定義: .NET SDK 是一套完整的工具和庫的集合,用於開發、構建和運行 .NET 應用程式。它提供了一組標準化的接口和工具,讓開發者可以更輕鬆地建立 .NET 應用程式。
功能:
.NET CLI: 命令列介面,用於建立、構建、運行和發布 .NET 應用程式。
編譯器: 將程式碼轉換為機器碼。
偵錯工具: 幫助開發者找出程式碼中的錯誤。
NuGet Client: 用於管理 NuGet 包。
作用: .NET SDK 提供了開發 .NET 應用程式所需的基礎設施,就像是建築工地上的工具箱,包含了各種工具和材料。
建立 ASP.NET Core MVC 專案
2.1. 建立專案
dotnet new mvc -n MyMvcApp
進入專案資料夾:
cd MyMvcApp
2.2. 執行專案
測試專案是否成功建立並執行:
dotnet run
3. 加入資料庫 (Entity Framework Core)
3.1. 安裝 EF Core
使用 NuGet 安裝 Entity Framework Core 和 SQL Server 提供者:
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.EntityFrameworkCore.Tools
3.2. 建立資料模型 (Entities)
在專案中建立 Models 資料夾,並在其中建立一個實體類別,例如 Product.cs:
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}
3.3. 建立資料庫上下文 (DbContext)
在 Data 資料夾中建立 AppDbContext.cs:
using Microsoft.EntityFrameworkCore;
using MyMvcApp.Models;
public class AppDbContext : DbContext
{
public AppDbContext(DbContextOptions options)
: base(options)
{
}
public DbSet<Product> Products { get; set; }
}
3.4. 設定連接字串
在 appsettings.json 中添加連接字串:
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\mssqllocaldb;Database=MyMvcAppDb;Trusted_Connection=True;"
}
在 Startup.cs 中設定資料庫服務:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddDbContext(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
}
4. 建立資料庫
4.1. 建立初始遷移
使用以下命令來創建數據庫遷移:
dotnet ef migrations add InitialCreate
如果沒安裝到efcore命令工具會有提示教你裝
dotnet ef migrations add InitialCreate 與 InitialDB 的差異
通常沒有實質差異: 在大多數情況下,使用 InitialCreate 或 InitialDB 來命名第一次遷移,對系統的運行不會產生任何影響。EF Core 會根據遷移腳本中的內容來執行相應的 SQL 指令,而不會特別區分名稱的細微差別。
命名慣例的重要性: 儘管如此,使用一致的命名慣例還是非常重要的。這有助於提高代碼的可讀性、可維護性,並且讓團隊成員更容易理解遷移的意圖。
---
dotnet ef migrations add InitialCreate 這行指令在 .NET Core 中使用 Entity Framework Core (EF Core) 時,就是用來 建立初始的遷移 (migration) 檔案 的。
什麼是遷移 (migration)?
概念: 遷移是一種追蹤資料庫變更的方式。當我們修改了資料模型 (例如新增、修改或刪除實體或屬性),EF Core 可以自動產生遷移腳本,這些腳本描述了如何將資料庫從一個狀態遷移到另一個狀態。
作用:
版本控制: 讓資料庫的變更有版本控制,方便追蹤和回溯。
自動化: 可以自動將資料庫更新到最新的狀態。
多人協作: 不同開發者可以同時對資料模型進行修改,然後合併遷移。
---
4.2. 更新資料庫
應用遷移並生成資料庫:
dotnet ef database update
5. 建立控制器與視圖
5.1. 建立控制器
使用 Entity Framework 的控制器:
dotnet aspnet-codegenerator controller -name ProductsController -m Product -dc AppDbContext --relativeFolderPath Controllers --useDefaultLayout --referenceScriptLibraries
5.2. 建立視圖
上述命令會自動生成 CRUD 視圖 (Create, Read, Update, Delete) 操作,並根據 Product 模型生成對應的頁面。
6. 執行與測試應用程式
執行應用程式,並訪問 /Products 頁面以測試 CRUD 功能:
dotnet run
7. 部署
7.1. 發佈專案
發佈應用程式:
dotnet publish -c Release -o ./publish
7.2. 部署到伺服器
根據伺服器類型選擇部署方式,例如 IIS、Azure、Docker 等。
DOTNET PACK打包成NUGET套件
使用 dotnet pack 命令將程式碼打包成 NuGet 套件有多種理由,特別是在軟體開發過程中,這有助於分享、復用、發佈和版本控制。
打包成 NuGet 套件的原因:
分享和重複使用程式碼:
當你有一段程式碼或一個程式庫(Library)是通用且可復用的時候,將它打包成 NuGet 套件可以輕鬆地分享給團隊或其他開發者使用。這樣,你的解決方案可以在多個專案中重複使用,而不需要每次都手動複製程式碼。
版本控制和發佈:
使用 NuGet 套件來管理程式庫可以很容易地進行版本控制。當你更新了程式庫的功能或修復了問題時,可以發佈一個新版本的套件。使用者可以根據需要選擇適合的版本進行升級或維護。
模組化程式設計:
把程式碼打包成 NuGet 套件有助於實現應用程式的模組化設計。每個功能模組(例如資料庫操作、身份驗證、日誌系統等)都可以打包成獨立的 NuGet 套件,這樣可以使專案結構更加清晰,且易於維護。
依賴管理:
NuGet 提供了一個強大的依賴管理機制。當你的 NuGet 套件依賴於其他套件或庫時,可以將這些依賴項自動加入到使用者的專案中,避免手動配置。
簡化部署流程:
將程式庫打包成 NuGet 套件,並發佈到內部或公共的 NuGet 資源庫(如 NuGet.org)之後,可以通過簡單的 dotnet add package 命令直接將這些套件引入到任何專案中,簡化了部署和管理過程。
封裝內部功能:
當你的專案有某些功能需要封裝起來(如敏感邏輯或專屬技術),打包成 NuGet 套件可以封裝這些功能,保護實現細節。
持續集成與交付 (CI/CD):
在軟體開發中,CI/CD 流程通常包含自動化的測試、打包和發佈過程。透過 dotnet pack,可以將經過測試的程式庫自動打包為 NuGet 套件並上傳到 NuGet 資源庫,實現自動化的交付和部署。
如何使用 dotnet pack:
使用 dotnet pack 命令可以將專案打包成 NuGet 套件:
dotnet pack
若要發佈到 NuGet 資源庫,通常需要使用 dotnet nuget push 命令將打包好的 .nupkg 套件發佈到 NuGet 伺服器:
dotnet nuget push <path-to-package> -k <api-key> -s https://api.nuget.org/v3/index.json