Entity Framework Core 2.0 使用入門

 

 
本文轉載自做者:曉晨Master(李志強) 原文章地址

https://www.cnblogs.com/stulzq/p/7717873.html  html

 
 

一.前言

Entity Framework(後面簡稱EF)做爲微軟家的ORM,天然而然從.NET Framework延續到了.NET Core。之前我也嫌棄EF過重而不去使用它,可是EF Core(Entity Framework Core)已經作了不少性能優化,還有一些增長新特性,吸引了我去使用它。關於EF Core 2.0 的新特性請看:http://www.cnblogs.com/stulzq/p/7366044.htmlgit

二.控制檯程序使用 EF Core(Code First)

1.新建一個.NET Core控制檯程序
2.經過Nuget安裝 EF Core
  • Sql Server 請安裝 Microsoft.EntityFrameworkCore.SqlServergithub

  • MySql/MariaDB請安裝 Pomelo.EntityFrameworkCore.MySql (2.0及以上版本)web

MySql/MariaDB 推薦使用Pomelo EF Core組件,由於官方的目前可能存在bug,Pomelo EF Core一樣是微軟官方所推薦的。sql

其餘數據庫請查看:https://docs.microsoft.com/zh-cn/ef/core/providers/shell

安裝好EF Core以後,打開項目*.csproj文件 添加以下代碼。數據庫

<ItemGroup> <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" /> </ItemGroup>

本文所用數據庫爲MariaDB性能優化

3.添加實體
public class Blog { public int BlogId { get; set; } public string Url { get; set; } public List<Post> Posts { get; set; } } public class Post { public int PostId { get; set; } public string Title { get; set; } public string Content { get; set; } public int BlogId { get; set; } public Blog Blog { get; set; } }
4.添加數據庫上下文
public class BloggingContext : DbContext { public DbSet<Blog> Blogs { get; set; } public DbSet<Post> Posts { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { //配置mariadb鏈接字符串 optionsBuilder.UseMySql("Server=localhost;Port=3306;Database=BloggingDB; User=root;Password=;"); } }
5.使用
static void Main(string[] args) { using (var db = new BloggingContext()) { db.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/adonet" }); var count = db.SaveChanges(); Console.WriteLine("{0} records saved to database", count); Console.WriteLine(); Console.WriteLine("All blogs in database:"); foreach (var blog in db.Blogs) { Console.WriteLine(" - {0}", blog.Url); } } Console.ReadKey(); }

如今F5運行,確定會出異常的,由於咱們須要使用的數據庫並不存在,EF Core默認的建立數據庫策略已經和EF不用,請看後面的遷移操做markdown

三.ASP.NET Core 使用 EF Core(Code First)

1.建立一個asp.net core 2.0 mvc項目
2.經過Nuget安裝 EF Core(同上)
3.添加實體(同上)
4.添加數據庫上下文
public class BloggingContext : DbContext { public BloggingContext(DbContextOptions<BloggingContext> options) : base(options) { } public DbSet<Blog> Blogs { get; set; } public DbSet<Post> Posts { get; set; } }
5.配置EF Core

在Startup添加以下代碼:mvc

public void ConfigureServices(IServiceCollection services) { services.AddDbContextPool<BloggingContext>(options => options.UseMySql("Server=localhost;Port=3306;Database=WebBloggingDB; User=root;Password=;")); //配置mariadb鏈接字符串 }
6.在Controller中獲取數據庫上下文。

這裏咱們利用ASP.NET Core的依賴注入來獲取數據庫上下文。

private readonly BloggingContext _context; public BlogsController(BloggingContext context) { _context = context; }

四.EF Core的遷移操做

前面說過,EF Core默認的建立數據庫策略已經和EF不用,須要咱們經過遷移來建立數據庫

這裏不管是控制檯仍是ASP.NET Core操做都是同樣的,這裏以ASP.NET Core做爲示例。

1.將ASP.NET Core項目設爲啓動項目
2.打開程序包管理器控制檯,並選擇對應的項目

3.執行添加遷移命令 Add-Migration init
4.遷移成功能夠看見在項目根目錄下添加了一個Migrations文件夾

5.更新遷移到數據庫,執行命令 Update-Database

這時咱們的數據庫已經被建立!

如今就能夠正常運行控制檯或者ASP.NET Core程序了!

五.EF Core遷移更新到生產環境

EF Core將遷移更新到生產環境可使用Script-Migration命令生成sql腳本,而後到生產數據庫執行

語法 Script-Migration [-From] <String> [-To] <String> [-Idempotent] [-Output <String>] [-Context <String>] [-Project <String>] [-StartupProject <String>] [<CommonParameters>]

示例:Script-Migration -From 20171023035934_v113 -To 20171024035934_V114

上面的命令會生成113版本遷移到114版本的SQL語句

生成SQL語句以下圖:

還有一種方法就是經過代碼進行自動遷移,這裏暫時不作敘述,後面的文章會詳細介紹。

六. EF Core 的 DB First

前面所介紹的都是Code First,這裏介紹一下DB First,大型項目推薦使用DB First。

1.建立數據庫(Sql Server)
CREATE DATABASE [Blogging]; GO USE [Blogging]; GO CREATE TABLE [Blog] ( [BlogId] int NOT NULL IDENTITY, [Url] nvarchar(max) NOT NULL, CONSTRAINT [PK_Blog] PRIMARY KEY ([BlogId]) ); GO CREATE TABLE [Post] ( [PostId] int NOT NULL IDENTITY, [BlogId] int NOT NULL, [Content] nvarchar(max), [Title] nvarchar(max), CONSTRAINT [PK_Post] PRIMARY KEY ([PostId]), CONSTRAINT [FK_Post_Blog_BlogId] FOREIGN KEY ([BlogId]) REFERENCES [Blog] ([BlogId]) ON DELETE CASCADE ); GO INSERT INTO [Blog] (Url) VALUES ('http://blogs.msdn.com/dotnet'), ('http://blogs.msdn.com/webdev'), ('http://blogs.msdn.com/visualstudio') GO
2.新建一個.NET Core控制檯程序
3.經過Nuget添加EF
  • 運行 Install-Package Microsoft.EntityFrameworkCore.SqlServer

  • 運行 Install-Package Microsoft.EntityFrameworkCore.Tools (EF工具包,建立實體)

4.執行下面的命令建立實體
Scaffold-DbContext "Data Source=.;Initial Catalog=Blogging;Integrated Security=True" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

命令格式爲:

Scaffold-DbContext "數據庫鏈接字符串" EF組件名(Microsoft.EntityFrameworkCore.SqlServer/Pomelo.EntityFrameworkCore.MySql/等等) -OutputDir 輸出文件夾名稱

而後查看項目目錄,能夠看到一件多了一個Models文件夾,下面有建立的實體和數據庫上下文。

ASP.NET Core項目操做是同樣的。

本文Demo: https://github.com/stulzq/EntityFrameworkCore2Demo

相關文章
相關標籤/搜索