HTML5技术

Entity Framework Core 2.0 使用入门 - 晓晨Master

字号+ 作者:H5之家 来源:H5之家 2017-10-24 09:33 我要评论( )

Entity Framework Core 2.0 使用入门 一.前言 Entity Framework(后面简称EF)作为微软家的ORM,自然而然从.NET Framework延续到了.NET Core。以前我也嫌弃EF太重而不去使用它,但是EF Core(Entity Framework Core)已经做了很多性能优化,还有一些增加新特

Entity Framework Core 2.0 使用入门

一.前言

Entity Framework(后面简称EF)作为微软家的ORM,自然而然从.NET Framework延续到了.NET Core。以前我也嫌弃EF太重而不去使用它,但是EF Core(Entity Framework Core)已经做了很多性能优化,还有一些增加新特性,吸引了我去使用它。关于EF Core 2.0 的新特性请看:

二.控制台程序使用 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文件 添加如下代码。

    本文所用数据库为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 = "" }); 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.打开程序包管理器控制台,并选择对应的项目

    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] IDENTITY, [Url] nvarchar(max) NOT NULL, CONSTRAINT [PK_Blog] PRIMARY KEY ([BlogId]) ); GO CREATE TABLE [Post] ( [PostId] IDENTITY, [BlogId] , [Content] nvarchar(max), [Title] nvarchar(max), CONSTRAINT [PK_Post] PRIMARY KEY ([PostId]), ); GO INSERT INTO [Blog] (Url) VALUES (''), (''), ('') GO

    2.新建一个.NET Core控制台程序 3.通过Nuget添加EF
  • 运行 Install-Package Microsoft.EntityFrameworkCore.SqlServer

  •  

  • 1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • AspectCore中的IoC容器和依赖注入 - Lemon丶

      AspectCore中的IoC容器和依赖注入 - Lemon丶

      2017-10-20 09:07

    • AspectCore.Extension.Reflection : .NET Core反射扩展库 - Lemon丶

      AspectCore.Extension.Reflection : .NET Core反射扩展库 - Lemon丶

      2017-10-19 09:00

    • CoreCLR源码探索(七) JIT的工作原理(入门篇) - q303248153

      CoreCLR源码探索(七) JIT的工作原理(入门篇) - q303248153

      2017-10-19 08:04

    • spring cloud+dotnet core搭建微服务架构:配置中心(四) - 龙向辉

      spring cloud+dotnet core搭建微服务架构:配置中心(四) - 龙向辉

      2017-10-14 10:12

    网友点评
    l