001 Entity Framework Core 2.x P1
博客園文章Id:12685793
EFCore 介紹
- 概述:
- Entity Framework Core 簡介
- 創建Model
- 與數據庫交互
- 關係數據
- 在
ASP.NET Core
中的應用
EFCore 是什麼?
EFCore
是微軟官方開發的一款ORM框架.
EFCore
相對於其他ORM的優勢在於可以大大的提高開發人員的生產力,並且由於是微軟自己的產品,所以和.Net Core
的結合也會非常的好,但是相應的, EFCore 的性能也會相對的要差於 .Net
世界的一些其它主流ORM框架,比如 Dapper,SqlSugar等.
爲什麼使用EFCore
- 生產力
- 支持很多數據庫
- 可以使用Linq
- 注重領域[Domain],而不是數據庫
EFCore 2.x支持的平臺框架
- .Net Core 2.x
- .Net 4.6.1+
- UWP
- Xamarin 等
在項目中使用EFCore
創建以下解決方案
在當前解決方案中,目前有兩個項目,EFCore.Data
和EFCore.Domain.Models
.
-
EFCore.Domain.Models 中主要用來編寫表實體類.
- 此項目需要依賴包
Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore
提供了,EFCore ORM 框架基本的核心功能
- 此項目需要依賴包
Microsoft.EntityFrameworkCore.SqlServer
Microsoft.EntityFrameworkCore.SqlServer
提供了,EFCore對SqlServer數據庫操作的核心功能
- 此項目需要依賴包
-
EFCore.Data 中主要是用來構造與數據庫表的映射關係,以及在此項目中構建
MyContext
類.- 此項目需要引用項目
EFCore.Domain.Models
- 此項目需要依賴包
Microsoft.EntityFrameworkcore.Tools
Microsoft.EntityFrameworkcore.Tools
提供了數據遷移的相關功能.
- 此項目需要引用項目
EF操作上下文類的封裝
using EFCore.Domain.Models;
using Microsoft.EntityFrameworkCore;
namespace EFCore.Data
{
public class MyContext:DbContext
{
public DbSet<Province> Provinces { get; set; }
public DbSet<City> Cities { get; set; }
//在程序運行之後,EFCore會來執行OnConfiguring方法,進行一些初始化配置
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
//在此處直接寫連接字符串是用來寫Demo的時候爲了方便,但是在實際生產中,不應該在此處直接編寫數據庫的鏈接字符串
optionsBuilder.UseSqlServer("Server =(localdb)\\MSSQLLocalDB;Database=EFCoreDemo; Trusted_Connection=True");
}
}
}
編寫City表實體類
namespace EFCore.Domain.Models
{
public class City
{
public int Id { get; set; }
public string Name { get; set; }
public string AreaCode { get; set; }
public int ProvinceId{ get; set; }
public Province Province { get; set; }
}
}
編寫Province實體類
using System.Collections.Generic;
namespace EFCore.Domain.Models
{
public class Province
{
public Province()
{
Cities = new List<City>();
}
public int Id { get; set; }
public string Name { get; set; }
public int Population { get; set; }
public List<City> Cities { get; set; }
}
}
安裝EFCore
我們需要在Nuget包管理中搜索以下安裝包即可.
Microsoft.EntityFrameworkCore
值得注意的是Microsoft.EntityFrameworkCore
只是提供了,基本的EFCore核心功能,如果我們需要操作具體的數據庫,那麼我們還需要安裝操作指定的數據庫的Providers開發包,下面我們以SqlServer數據庫爲例,所以我們需要再安裝支持SqlServer的EFCore開發包,在Nuget中搜索以下安裝包即可.
Microsoft.EntityFrameworkCore.SqlServer
查看本機SqlServer 實例的 cmd命令
Sqllocaldb info
EFCore 遷移
- 創建/刪除 Domain Model
- 創建遷移文件
- 應用遷移到數據庫,獲取生成SQL腳本
遷移用的庫
如果我們想要在Vs中依賴EFCore使用遷移命令,將Model代碼映射到數據庫中,我們還需要在Vs中安裝一個依賴包.
Microsoft.EntityFrameworkCore.Tools
Microsoft.EntityFrameworkCore.Tools 會依賴 Microsoft.EntityFrameworkCore.Desion
- Microsoft.EntityFrameworkCore.Tools :用來執行PowerShell命令
- Microsoft.EntityFrameworkCofe.Desion :是一個遷移引擎
遷移要求:
- 需要一個可執行的項目
- 必須在啓動項目裏
安裝完成之後,我們就可以在Vs的包管理控制檯中,輸入遷移命令,將項目中的Model,遷移至數據庫中,生成表,以及表數據,在包管理控制器中,實際上我們可以執行PowerShell的相關命令.
我們需要選擇DbContext所在的項目.
我們現在可以在包管理控制檯中,查看EFCore相關的命令,我們數據一下命令來進行查看.
get-help entityframeworkcore
命令解釋:
Add-Migration 如果創建了Model,或者已創建的Model發生了改變,那麼此命令執行就會生成一些sql語句,這些sql語句執行之後,那麼數據庫中表結果,就會根據model,進行匹配,並且一同演進. (只是生成sql語句,這個sql語句並沒有執行.)
Update-Database 等於是在Add-Migration命令的基礎上,將生成好的sql執行到數據庫中,達到數據庫和Model同步的目的.
現在我們進行遷移,此處需要注意的是在進行遷移之前,我們需要將DbContext所在的項目設置爲啓動項,否則在之前Add-Migration命令的時候會報錯,如下圖:
我們修改啓動項之後再執行Add-Migration命令:
這個時候,在EFCore.Data
項目中會自動創建一個Migrations
文件夾,並生成,此次遷移要使用到的變化(類似於一個快照)即,遷移文件.
我們可以根據此次生成的遷移文件,根據 Script-Migration 命令 生成需要遷移的sql腳本.
在開發的時候,我們可以使用Upate-Database命令來直接生成數據庫,如果我們想看執行的明細,我們可以在Update-Database 命令後面跟一個 -verbose參數,即Update-Database -verbose
此時生成的數據庫文件在當前計算機的當前用戶的目錄下,我的電腦是
C:\Users\ZYJNO
我們通過數據庫對象管理器,就可以看到我們所創建的數據庫了.
- 上述文檔參考自
EFCore 2.x 入門 p1
源碼下載