使用Entity Framework Core加入既有資料庫的模型
文章推薦指數: 80 %
接著在PMC (Package Manager Console) 下Scaffold-DbContext指令,將建立既有資料庫的EF Core 模型。
從選單選取「Tools」 - 「NuGet Package ...
EntityFrameworkCore不像.NETFramework的EntityFramework可以透過圖形化工具產生既有資料庫的模型(DbContext),但是可透過命令來建立模型,這一篇文章就是要說明如何建立既有資料庫的EFCore模型。
啟動VisualStudio2019開發環境。
從「File」-「New」-「Project」,在「Createanewproject」對話盒中選擇ConsoleApp(.NETCore),按下「Next」:
指定專案名稱之後按下「Create」。
使用NuGetPackageManager加入「Microsoft.EntityFrameworkCore.SqlServer」、「Microsoft.EntityFrameworkCore.Tools」。
從選單選取「Tools」-「NuGetPackageManager」-「ManageNuGetPackagesforsolution」,在「Browse」頁裡分別搜尋「Microsoft.EntityFrameworkCore.SqlServer」、「Microsoft.EntityFrameworkCore.Tools」並安裝它們。
在SoltuionExplorer中可以看到安裝之後的套件。
接著在PMC(PackageManagerConsole)下Scaffold-DbContext指令,將建立既有資料庫的EFCore模型。
從選單選取「Tools」-「NuGetPackageManager」-「PackageManagerConsole」,輸入以下指令:
Scaffold-DbContext"Server=.\SQLExpress;Database=Northwind;Trusted_Connection=True;"Microsoft.EntityFrameworkCore.SqlServer-OutputDirModels-TablesEmployees,Orders
Scaffold-DbContext命令後面接的是資料庫連線字串「"Server=.\SQLExpress;Database=Northwind;Trusted_Connection=True;"」這將連接到本機SqlExpress伺服器裡頭的Northwind資料庫並以信任目前登入帳號登入資料庫。
後面接著的是「Microsoft.EntityFrameworkCore.SqlServer」是資料庫提供者,-OutputDir參數指定要輸出的資料夾,-Tables參數則是指定要產生模型的資料表名稱,若有多個使用逗點區隔。
執行完成在SoltuionExplorer中看到EFCore模型將被成功地建立Models資料夾。
開啟Models資料夾中的Employees.cs你將會看到以下程式:
namespaceConsoleApp2.Models
{
publicpartialclassEmployees
{
publicEmployees()
{
InverseReportsToNavigation=newHashSet();
Orders=newHashSet();
}
publicintEmployeeId{get;set;}
publicstringLastName{get;set;}
publicstringFirstName{get;set;}
publicstringTitle{get;set;}
publicstringTitleOfCourtesy{get;set;}
publicDateTime?BirthDate{get;set;}
publicDateTime?HireDate{get;set;}
publicstringAddress{get;set;}
publicstringCity{get;set;}
publicstringRegion{get;set;}
publicstringPostalCode{get;set;}
publicstringCountry{get;set;}
publicstringHomePhone{get;set;}
publicstringExtension{get;set;}
publicbyte[]Photo{get;set;}
publicstringNotes{get;set;}
publicint?ReportsTo{get;set;}
publicstringPhotoPath{get;set;}
publicvirtualEmployeesReportsToNavigation{get;set;}
publicvirtualICollectionInverseReportsToNavigation{get;set;}
publicvirtualICollectionOrders{get;set;}
}
}
Employees類別仿照Northwind資料庫的Employees資料表成為一個Entity類別。
開啟NorthwindContext.cs檔案,內容如下:
publicpartialclassNorthwindContext:DbContext
{
publicNorthwindContext()
{
}
publicNorthwindContext(DbContextOptionsoptions)
:base(options)
{
}
publicvirtualDbSetEmployees{get;set;}
publicvirtualDbSetOrders{get;set;}
protectedoverridevoidOnConfiguring(DbContextOptionsBuilderoptionsBuilder)
{
if(!optionsBuilder.IsConfigured)
{
#warningToprotectpotentiallysensitiveinformationinyourconnectionstring,youshouldmoveitoutofsourcecode.Seehttp://go.microsoft.com/fwlink/?LinkId=723263forguidanceonstoringconnectionstrings.optionsBuilder.UseSqlServer("Server=.\\SQLExpress;Database=Northwind;Trusted_Connection=True;");
}
}
~~~相關內容省略~~~
}
partialvoidOnModelCreatingPartial(ModelBuildermodelBuilder);
}
NorthwindContext類別繼承自DbContext,並根據Scaffold-DbContext命令所傳遞的連線字串及資料表產生相對應內容。
接著可以透過NorthwindContext類別連接到資料庫,並存取資料內容。
開啟Program.cs,在Main程式區塊中建立NorthwindContext物件,使用foreach將Employees集合將資料內容列表出來,程式碼如下:
staticvoidMain(string[]args)
{
using(vardb=newNorthwindContext())
{
foreach(varempindb.Employees)
{
Console.WriteLine($"{emp.EmployeeId}-{emp.FirstName},{emp.LastName}-{emp.Title}");
}
}
}
執行結果如下:
相關學習資源
UAC193使用ASP.NETCore設計跨平台網站開發Part1-VisualC#
UAC194使用ASP.NETCore設計跨平台網站開發Part2-VisualC#
U2147Angular與ASP.NETCoreWebAPI開發實戰演練
延伸文章資訊
- 1NET Core第10天_搭配EF Core串聯資料庫Db First - iT 邦幫忙
#warning To protect potentially sensitive information in your connection string, you should move ...
- 2DbContext lifetime in desktop app with SQLite - Microsoft Q&A
- 3Entity Framework Core with Existing Database
Scaffold-DbContext Command ... In the above command, the first parameter is a connection string w...
- 4Scaffold-DbContext ignores table after updating to EF Core ...
Tools) 6.0.5 I noticed that when running Scaffold-DbContext , a table in the database is complete...
- 5Generating a model from an existing database
You use the DbContext Scaffold command to generate the model. The command has two required argume...