1. 程式人生 > >Entity Framework Core 2 0 使用入門

Entity Framework Core 2 0 使用入門

一.前言

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.html

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

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

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

MySql/MariaDB 推薦使用Pomelo EF Core元件,因為官方的目前可能存在bug,Pomelo EF Core同樣是微軟官方所推薦的。

其他資料庫請檢視:https://docs.microsoft.com/zh-cn/ef/core/providers/

安裝好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不用,請看後面的遷移操作

三.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新增如下程式碼:

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.開啟程式包管理器控制檯,並選擇對應的專案

0?wx_fmt=png

3.執行新增遷移命令 Add-Migration init
4.遷移成功可以看見在專案根目錄下添加了一個Migrations資料夾

0?wx_fmt=png

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

0?wx_fmt=png

這時我們的資料庫已經被建立!

0?wx_fmt=png

現在就可以正常執行控制檯或者ASP.NET Core程式了!

0?wx_fmt=gif

#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語句如下圖:

0?wx_fmt=png

還有一種方法就是通過程式碼進行自動遷移,這裡暫時不做敘述,後面的文章會詳細介紹。

五. EF Core 的 DB First

前面所介紹的都是Code First,這裡介紹一下DB First,大型專案推薦使用DB First。

1.建立資料庫(Sql Server)

CREATE DATABASE [Blogging];GOUSE [Blogging];GOCREATE TABLE [Blog] (    [BlogId] int NOT NULL IDENTITY,    [Url] nvarchar(max) NOT NULL,    CONSTRAINT [PK_Blog] PRIMARY KEY ([BlogId]));GOCREATE 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);GOINSERT 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資料夾,下面有建立的實體和資料庫上下文。

0?wx_fmt=png

ASP.NET Core專案操作是一樣的。

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

原文地址:http://www.cnblogs.com/stulzq/p/7717873.html

.NET社群新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注

640?wx_fmt=jpeg