ef mysql db first_Net Core使用EF之DB First
一.新建一個.net core的MVC項目
新建好項目后,不能像以前一樣直接在新建項中添加ef了,需要用命令在添加ef的依賴
二.使用Nuget添加EF的依賴
輸入命令:? Install-Package Microsoft.EntityFrameworkCore.SqlServer
安裝成功后就可以在依賴項中看到
注意執行命令的項目你可能需要選擇一下
三.如果是使用db first,需要根據數據庫生成model,就還需要使用命令添加兩個依賴
Install-Package Microsoft.EntityFrameworkCore.Tools
Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design
安裝成功后就可以在依賴項中看到
四.相關依賴添加成功后,就可以更具一個命令就可以從數據庫生成model了
命令:? ? Scaffold-DbContext "Server=.;Database=Food;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
-OutputDir Models的意思是把生成的實體和上下文都輸出到Models這個文件夾如果不需要這樣直接輸出到當前類庫中不接即可
注意:有可能執行這個命令會報錯:
1:執行這一步的時候出現了點問題 ,因為系統是win7,powershell版本太低了,不支持這個命令,需要安裝
3.0以上的powershell版本才行
2:?Could not load assembly 'DAL'. Ensure it is referenced by the startup project 'xxxx'.
是因為主項目沒有添加到這個DAL層的引用,添加了就行了,所以估計執行這個命令會使用到啟動項目的一些東西
3:Your startup project 'xxxxx' doesn't reference Microsoft.EntityFrameworkCore.Design.This package is required for the Entity Framework Core Tools to work. Ensure your startup project is correct, install the package, and try again.
他是說你啟動項目沒有這個依賴,在啟動項目里邊執行一下這個兩個命令就好了
Install-Package Microsoft.EntityFrameworkCore.Tools
Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design
好像執行執行那個.Tools也可以,我就奇怪了nuget執行的明明不是啟動項目為什么啟動項目中還要添加這個依賴呢,
只在啟動項目添加這個依賴行不行呢
如果model已經生成過了,想全部覆蓋的話,可以在后面加一個-force命令:
Scaffold-DbContext "Server=.;Database=Food;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -force
更新某個表:后面加-tables 表名
Scaffold-DbContext "Server=.;Database=Food;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models?-tables Article
但是更新某個表有坑啊,如果覆蓋了,那個表不會生成導航屬性,而且那個山下文對象也只有那個表的內容了....暫時沒有找到更好的辦法...
單獨更新拷貝過來,或者全部更新,或者直接寫手吧,比如添加了一個字段什么的
添加成功后在models可以看到, 生成了上下文對象與和表對應的model
官方文檔
然后就可以開始使用EF了public?IActionResult?Index()
{
FoodContext?fc?=?new?FoodContext();
List?ptlist?=?fc.ProType.ToList();
ViewBag.ptlist?=?ptlist;
return?View();
}
五.使用依賴注入來裝載EF的上下文對象
.net core中用了不少的依賴注入,官方文檔中也推薦使用
1:刪除方法protected?override?void?OnConfiguring(DbContextOptionsBuilder?optionsBuilder)
{
//#warning?To?protect?potentially?sensitive?information?in?your?connection?string,?you?should?move?it?out?of?source?code.?See?http://go.microsoft.com/fwlink/?LinkId=723263?for?guidance?on?storing?connection?strings.
optionsBuilder.UseSqlServer(@"Server=.;Database=Food;Trusted_Connection=True;");
}
2:添加方法public?FoodContext(DbContextOptions?options)
:?base(options)
{
}
添加的是一個構造函數用于構造函數注入(這個方法在新版的時候會自動加入)
3:在startup.cs的ConfigureServices方法中添加依賴注入public?void?ConfigureServices(IServiceCollection?services)
{
//?Add?framework?services.
services.AddMvc();
services.AddDbContext(option?=>?{
option.UseSqlServer("Data?Source?=.;?Initial?Catalog?=?EFCore_dbfirst;?User?ID?=?sa;?Password?=?sa.123");
});
}
注:usersqlserver是一個擴展方法,需要添加ef core的引用using Microsoft.EntityFrameworkCore;
連接字符串寫入配置文件
4:使用的時候就不能直接去實例化了否則會報錯找不到上下文對象
應該使用注入的方式去獲取ef對象,例如構造函數注入private?CNBlog_ServerContext?ef;
public?ArticleDAL(CNBlog_ServerContext?context)?//通過依賴注入得到實例
{
ef?=?context;
}
微軟官方文檔:
https://docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/existing-db
歡迎加群討論技術,群號:677373950
總結
以上是生活随笔為你收集整理的ef mysql db first_Net Core使用EF之DB First的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS代码质量要求_Unity移动端代码
- 下一篇: linux系统怎么设置开机密码,Linu