EF Core 2.0使用MsSql/MySql實現DB First和Code First

參考地址shell

Entity Framework官網數據庫

ASP.NET Core MVC 和 EF Core - 教程系列json

環境windows

Visual Studio 2017 架構

最新版本的.NET Core 2.0 SDK mvc

最新版本的 Windows PowerShellapp

開始搭建

一、在 Visual Studio 2017 中建立新項目ide

  • 「文件」>「新建」>「項目」
  • 從左側菜單中選擇「已安裝」>「模板」>「Visual C#」>「.NET Core」。
  • 選擇「ASP.NET Core Web 應用程序」。
  • 輸入「EFGetStarted.AspNetCore.NewDb」做爲名稱,而後單擊「肯定」。
  • 在「新建 ASP.NET Core Web 應用程序」對話框中:
    • 確保在下拉列表中選擇「.NET Core」和「ASP.NET Core 2.0」選項
    • 選擇「Web 應用程序(模型視圖控制器)」項目模板
    • 確保將「身份驗證」設置爲「無身份驗證」
    • 單擊「肯定」

二、安裝 Entity Framework Core工具

  • 工具」>「NuGet 包管理器」>「包管理器控制檯」

1.一、安裝數據庫提供程序oop

MsSql

運行:Install-Package Microsoft.EntityFrameworkCore.SqlServer

MySql

運行:

柚子:Install-Package Pomelo.EntityFrameworkCore.MySql
或者
官方:Install-Package MySql.Data.EntityFrameworkCore -Version 8.0.11

1.二、安裝程序包管理器控制檯
運行:Install-Package Microsoft.EntityFrameworkCore.Tools

1.三、安裝設計包
運行:Install-Package Microsoft.EntityFrameworkCore.Design

數據據庫提供程序設計包 (EF Core 2.0 再也不須要)
MsSql

運行:Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design
MySql

運行:Install-Package Pomelo.EntityFrameworkCore.MySql.Design

DB First——從現有數據庫建立模型

MySql

運行:Scaffold-DbContext -Connection "Server=localhost;User Id=root;Password=123456;Database=vanfj" -Provider "Pomelo.EntityFrameworkCore.MySql" -OutputDir "Models"

MsSql

運行:Scaffold-DbContext -Connection "Server=localhost;User Id=root;Password=123456;Database=vanfj" -Provider "Microsoft.EntityFrameworkCore.SqlServer" -OutputDir "Models"

使用說明:將Connection中的鏈接字符串替換爲本身的數據庫鏈接,將OutputDir中的Models替換爲本身要生成的文件目錄名

Code First——從模型生成到數據庫

一、建立模型

1.一、建立上下文

namespace Model
{
    public class SchoolContext : DbContext
    {
        public SchoolContext(DbContextOptions<SchoolContext> options) : base(options)
        {
        }

        public DbSet<Course> Courses { get; set; }
        public DbSet<Enrollment> Enrollments { get; set; }
        public DbSet<Student> Students { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Course>().ToTable("Course");
            modelBuilder.Entity<Enrollment>().ToTable("Enrollment");
            modelBuilder.Entity<Student>().ToTable("Student");
        }
    }
    public class Student
    {
        public int ID { get; set; }
        public string LastName { get; set; }
        public string FirstMidName { get; set; }
        public DateTime EnrollmentDate { get; set; }

        public ICollection<Enrollment> Enrollments { get; set; }
    }
    public enum Grade
    {
        A, B, C, D, F
    }

    public class Enrollment
    {
        public int EnrollmentID { get; set; }
        public int CourseID { get; set; }
        public int StudentID { get; set; }
        public Grade? Grade { get; set; }

        public Course Course { get; set; }
        public Student Student { get; set; }
    }

    public class Course
    {
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public int CourseID { get; set; }
        public string Title { get; set; }
        public int Credits { get; set; }

        public ICollection<Enrollment> Enrollments { get; set; }
    }
}
View Code

1.二、Startup文件注入上下文

EF Core在版本 2.0 中,引入了一種在依賴關係注入中註冊自定義 DbContext 類型的新方法,即以透明形式引入可重用 DbContext 實例的池。
要使用 DbContext 池,請在服務註冊期間使用 AddDbContextPool 而不是 AddDbContext

public void ConfigureServices(IServiceCollection services)
{
services.AddDbContextPool<SchoolContext>(options =>
options.UseMySql(Configuration.GetConnectionString("DefaultConnection")));

services.AddMvc().AddJsonOptions(options =>
options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore);
}
View Code

1.三、appsettings.json文件添加鏈接字符串

{
"ConnectionStrings": {
"DefaultConnection": "Server=localhost;User Id=root;Password=123456;Database=vanfj"
},
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Warning"
}
}
}
View Code

二、執行NuGet命令,建立數據庫

2.一、爲遷移搭建基架

運行:Add-Migration InitialCreate

2.二、將新遷移應用到數據庫

運行:Update-Database

EF Core 2.0 NuGet命令

Get-Help about_EntityFrameworkCore 獲取EF Core命令幫助

添加一個遷移數據庫 遷移的名稱 目錄(及其子命名空間)路徑是相對於項目目錄。 默認值爲"Migrations"。
Add-Migration -Name <String> -OutputDir <String>
Add-Migration InitialCreate 第一次執行初始化用這個

刪除上次的遷移數據庫 不檢查以查看遷移是否已應用到數據庫。
Remove-Migration -Force

目標遷移。 若是爲"0",將恢復全部遷移。 默認到最後一個遷移。
Update-Database
Update-Database LastGoodMigration 還原遷移

刪除數據庫 顯示的數據庫會被丟棄,但沒有刪除它
Drop-Database -WhatIf

Get-DbContext 獲取有關 DbContext 類型的信息

從數據庫更新DbContext和實體的類型
Scaffold-DbContext
-Connection <String> 數據庫的鏈接字符串。
-Provider <String> 要使用的提供程序。 (例如 Microsoft.EntityFrameworkCore.SqlServer)
-OutputDir <String > 要將文件放入的目錄。 路徑是相對於項目目錄。
--Context <String > 若要生成的 dbcontext 名稱。
-Schemas <String[]> 要生成實體類型的表架構。
-Tables <String[]> 要生成實體類型的表。
-DataAnnotations 使用屬性來配置該模型 (若是可能)。 若是省略,則使用僅 fluent API。
-UseDatabaseNames 使用直接從數據庫表和列名稱。
-Force 覆蓋現有文件。

從遷移中生成的 SQL 腳本
Script-Migration
-From <String> 開始遷移。 默認值爲 0 (初始數據庫)
-To <String> 結束的遷移。 默認到最後一個遷移
-Idempotent 生成能夠在任何遷移的數據庫使用的腳本
-Output <String> 要將結果寫入的文件

 個人博客即將搬運同步至騰訊雲+社區,邀請你們一同入駐: https://cloud.tencent.com/developer/support-plan 
相關文章
相關標籤/搜索