目的
說明EFCore基本語法,EFCore的基礎為Linq,所以使用上與Linq邏輯一模一樣,只是語法有些微差異。
建立新專案
選擇ASP.NET Core Web API專案範本,並執行下一步
設定新的專案
命名你的專案名稱,並選擇專案要存放的位置。
其他資訊
直接進行下一步
NuGet加入套件
- Microsoft.EntityFrameworkCore.Sqlite
- Microsoft.EntityFrameworkCore.Design
新增Student.cs類別檔
新增Models資料夾,並在裡面新增Student.cs類別檔
編輯Student.cs類別檔
public class Student {
public int Id { get; set; }
public string Name { get; set; } = "BillHuang";
public int Age { get; set; }
}
新增EFCoreContext.cs類別檔
新增DBContext資料夾,並在裡面新增EFCoreContext.cs類別檔
編輯EFCoreContext.cs類別檔
//別忘了using
using Microsoft.EntityFrameworkCore;
using EFCoreExample_Advanced.Models;
namespace EFCoreExample_Advanced.DBContext {
//繼承DbContext
public class EFCoreContext : DbContext {
//複寫OnConfiguring
protected override void OnConfiguring(DbContextOptionsBuilder options) {
//指定連線字串,連到SQLite
options.UseSqlite("Data Source=Student.sqlite");
}
//設定student資料表
public DbSet<Student> Students { get; set; }
}
}
編輯Program.cs檔
//別忘了using
using EFCoreExample_Advanced.DBContext;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
//註冊EFCoreContext
builder.Services.AddDbContext<EFCoreContext>();
//下面省略
到套件管理器主控台下Terminal指令
檢視>其他視窗>套件管理器主控台
下方會出現命令列
輸入dir
會顯示目錄檔案及子目錄清單
輸入cd EFCoreExample_Advanced
移動到專案檔底下後再輸入dir
確認是否到正確路徑
輸入dotnet tool install --global dotnet-ef
在全域安裝EFCore CLI工具(如果已經安裝,會出現下圖訊息,即可忽略此步驟)
輸入dotnet ef migrations add CreateInitial
初始化SQLite
輸入dotnet ef database update
更新SQLite資料表
成功就會自動產生Migrations資料夾
編輯WeatherForecastController檔案編輯
- 寫新的對外API:QueryAsync
[HttpGet("QueryAsync")]
public async Task<IActionResult> QueryAsync() {
//透過ToListAsync方法就可以將Students所有資料取出
var Result = await _context.Students.ToListAsync();
return Ok(Result);
}
- 寫新的對外API:QueryFirstOrDefaultAsync
[HttpGet("QueryFirstOrDefaultAsync")]
public async Task<IActionResult> QueryFirstOrDefaultAsync() {
//取得第一筆
var Result = await _context.Students.FirstOrDefaultAsync();
return Ok(Result);
}
- 交易機制 當有多張表需要異動時,為了確認資料的一致性,會需要透過交易機制做保護,只有全部成功或全部失敗。
[HttpGet("TransactionsAsync")]
public async Task<IActionResult> TransactionsAsync() {
//開始資料庫交易
using var trans = _context.Database.BeginTransaction();
//建立一筆資料
var data = new Student() { Name = "BillHuang", Age = 20 };
//新增到Students資料表中
_context.Students.Add(data);
//執行,此步驟還不會真的異動到資料
await _context.SaveChangesAsync();
//取得第一筆資料
var Result = await _context.Students.FirstOrDefaultAsync();
//當執行了Commit後才會將上面的異動存到資料庫
trans.Commit();
return Ok(Result);
}