001 Entity Framework Core 2.x P1

001 Entity Framework Core 2.x P1


博客園文章Id:12685793


EFCore 介紹

  • 概述:
    • Entity Framework Core 簡介
    • 創建Model
    • 與數據庫交互
    • 關係數據
    • ASP.NET Core中的應用

EFCore 是什麼?

EFCore是微軟官方開發的一款ORM框架.

EFCore原理
EFCore原理

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.DataEFCore.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腳本.

命令執行成功
命令執行成功

成功生成了遷移相關的sql語句
成功生成了遷移相關的sql語句

在開發的時候,我們可以使用Upate-Database命令來直接生成數據庫,如果我們想看執行的明細,我們可以在Update-Database 命令後面跟一個 -verbose參數,即Update-Database -verbose

命令執行成功
命令執行成功

此時生成的數據庫文件在當前計算機的當前用戶的目錄下,我的電腦是
C:\Users\ZYJNO

數據庫文件
數據庫文件

我們通過數據庫對象管理器,就可以看到我們所創建的數據庫了.

數據庫對象管理器
數據庫對象管理器

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章