ASP.NET Core 2 API 使用 Entity Framework Core
以下操作使用visual studio 2017
ASP.NET Core:2.0版
資料庫建立方式為Database first
輸入資料夾名稱Models,名稱可以自行命名
參數說明:
services.AddDbContext<DemoContext>();
官方建議資料庫連線字串為機密資訊且可以會隨著開發環境而更改,所以應該將連線字串放到組態設定檔中
修改方式
這個修改雖然聽起來很美好,但若你使用-Force指令去更新model,那上述的DemoContext.cs修改就要重新做一遍,因為DemoContext.cs會自動再重新產生,所以修改的code會全部消失...,
不過這個問題已經在ASP.NET Core 2.1解決囉,DemoContext.cs會自動產生建構子,就不用自己新增了
public DemoContext(DbContextOptions<DemoContext> options)
: base(options)
{
}
ASP.NET Core:2.0版
資料庫建立方式為Database first
建立ASP.NET Core 2 API 專案
步驟可以參考這篇文章
建立資料庫
資料庫名稱:Demo
資料表:Member、Items
建立資料夾,存放Entity Framework Core所產生的Class跟Context檔案
於專案上按右鍵 > 加入 > 新資料夾
輸入資料夾名稱Models,名稱可以自行命名
使用Entity Framework Core建立Entity Class跟Context檔案
過去使用Entity Framework的Database first會產生edmx檔案,
但Entity Framework Core沒有這種方便的功能了
比較類似Code First的方式,只能透過下指令的方式去更新物件
工具 > NuGet 封裝管理員 > 套件管理器主控台
在PM>後方輸入以下指令後,按Enter鍵
Scaffold-DbContext "Server=ADMIN;Database=Demo;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models參數說明:
- Scaffold-DbContext:資料庫連線字串
- -OutputDir :要將產生的檔案存放在哪個資料夾
- -Force:產生的檔案是否要覆寫現有的檔案,如果資料表有異動,這個指定一定要打
查看執行結果
- Models資料夾:存放由指令產生的DemoContext.cs、Items.cs與Member.cs
- DemoContext.cs:含有兩個屬性Items與Members,後續就能以物件的方式操作資料庫資料
- OnConfiguring:宣告資料庫連線字串,這邊我們可以看到上一行有警告資訊,後面的補充資料會再另外說明
需要特別注意,如果有任何欄位修改,請去變動資料表的設定然後再重新下指令,指令的最後面記得加上 -Force
Scaffold-DbContext "Server=ADMIN;Database=Demo;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Force
如果自己手動刪掉Models裡面的檔案,下指令時可能會出現 Build failed.訊息
設定相依注入
開啟Startup.cs > 在ConfigureServices內加入DI注入的設定
後續我們將在Controller中使用DemoContext,所以需要在這邊做DI的設定
services.AddDbContext<DemoContext>();
設定Controller
1.Controllers資料夾 > 開啟ValuesController.cs
2.新增建構子與注入DemoContext
private readonly DemoContext _context;
public ValuesController(DemoContext context)
{
_context = context;
}
3.編輯Get(int id)的方法
透過id參數找到對應的Member並回傳Email資料
var member = _context.Member.Find(id);
return member.Email;
查看執行結果
補充:
DemoContext.cs的OnConfiguring中關於資料庫連線字串的警告訊息官方建議資料庫連線字串為機密資訊且可以會隨著開發環境而更改,所以應該將連線字串放到組態設定檔中
修改方式
1.修改appsettings.json
宣告連線字串,如果有遇到\反斜線符號,記得改成\\雙反斜線,否則會有警告訊息
"ConnectionStrings": {
"DemoDatabase": "Server=ADMIN;Database=Demo;Trusted_Connection=True;"
},
2.修改Startup.cs
將連線字串的資訊傳入DemoContext
3.修改DemoContext.cs
增加建構子,讓組態設定可以注入
public DemoContext(DbContextOptions<DemoContext> options) : base(options)
{
}
如果忘記加會遇到以下錯誤
ArgumentException: AddDbContext was called with configuration, but the context type 'DemoContext' only declares a parameterless constructor. This means that the configuration passed to AddDbContext will never be used. If configuration is passed to AddDbContext, then 'DemoContext' should declare a constructor that accepts a DbContextOptions<DemoContext> and must pass it to the base constructor for DbContext.
刪除OnConfiguring方法
這個修改雖然聽起來很美好,但若你使用-Force指令去更新model,那上述的DemoContext.cs修改就要重新做一遍,因為DemoContext.cs會自動再重新產生,所以修改的code會全部消失...,
不過這個問題已經在ASP.NET Core 2.1解決囉,DemoContext.cs會自動產生建構子,就不用自己新增了
public DemoContext(DbContextOptions<DemoContext> options)
: base(options)
{
}
留言
張貼留言