參考地址 Entity Framework官網 ASP.NET Core MVC 和 EF Core - 教程系列 環境 Visual Studio 2017 最新版本的.NET Core 2.0 SDK 最新版本的 Windows PowerShell 開始搭建 1、在 Visual Studio ...
參考地址
ASP.NET Core MVC 和 EF Core - 教程系列
環境
開始搭建
1、在 Visual Studio 2017 中創建新項目
- “文件”>“新建”>“項目”
- 從左側菜單中選擇“已安裝”>“模板”>“Visual C#”>“.NET Core”。
- 選擇“ASP.NET Core Web 應用程式”。
- 輸入“EFGetStarted.AspNetCore.NewDb”作為名稱,然後單擊“確定”。
- 在“新建 ASP.NET Core Web 應用程式”對話框中:
- 確保在下拉列表中選擇“.NET Core”和“ASP.NET Core 2.0”選項
- 選擇“Web 應用程式(模型視圖控制器)”項目模板
- 確保將“身份驗證”設置為“無身份驗證”
- 單擊“確定”
2、安裝 Entity Framework Core
- 工具”>“NuGet 包管理器”>“包管理器控制台”
1.1、安裝資料庫提供程式
MsSql
運行:Install-Package Microsoft.EntityFrameworkCore.SqlServer
MySql
運行:柚子:Install-Package Pomelo.EntityFrameworkCore.MySql
或者
官方:Install-Package MySql.Data.EntityFrameworkCore -Version 8.0.11
1.2、安裝程式包管理器控制台
運行:Install-Package Microsoft.EntityFrameworkCore.Tools
1.3、安裝設計包
運行: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、創建模型
1.1、創建上下文
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; } } { 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.2、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.3、appsettings.json文件添加連接字元串
{ "ConnectionStrings": { "DefaultConnection": "Server=localhost;User Id=root;Password=123456;Database=vanfj" }, "Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Warning" } } }View Code
2、執行NuGet命令,創建資料庫
2.1、為遷移搭建基架
運行:Add-Migration InitialCreate
2.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> 要將結果寫入的文件