博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Entity Framework Core 2.0 使用入门
阅读量:6840 次
发布时间:2019-06-26

本文共 4515 字,大约阅读时间需要 15 分钟。

一.前言

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同样是微软官方所推荐的。

其他数据库请查看:

安装好EF Core之后,打开项目*.csproj文件 添加如下代码。

本文所用数据库为MariaDB

3.添加实体
public class Blog{    public int BlogId { get; set; }    public string Url { get; set; }    public List
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
Blogs { get; set; } public DbSet
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
options) : base(options) { } public DbSet
Blogs { get; set; } public DbSet
Posts { get; set; }}
5.配置EF Core

在Startup添加如下代码:

public void ConfigureServices(IServiceCollection services){    services.AddDbContextPool
(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.打开程序包管理器控制台,并选择对应的项目

668104-20171023163849394-1749370744.png

3.执行添加迁移命令 Add-Migration init
4.迁移成功可以看见在项目根目录下添加了一个Migrations文件夹

668104-20171023164609723-1825005413.png

5.更新迁移到数据库,执行命令 Update-Database

668104-20171023164726504-1148106977.png

这时我们的数据库已经被创建!

668104-20171023164848519-1314979904.png

现在就可以正常运行控制台或者ASP.NET Core程序了!

668104-20171023165647769-1368603558.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语句如下图:

668104-20171023170125035-333266862.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文件夹,下面有创建的实体和数据库上下文。

668104-20171023202433691-1581665885.png

ASP.NET Core项目操作是一样的。

本文Demo:

转载地址:http://cfzul.baihongyu.com/

你可能感兴趣的文章
Sys和system用户、sysdba 和sysoper系统权限、dba角色
查看>>
loadrunner的atof函数有问题,请大家慎用!!!
查看>>
[InnoDB系列] - InnoDB独立/共享表空间的转换
查看>>
【STM32 .Net MF开发板学习-24】激光防盗模型
查看>>
OpenGL编程轻松入门(二)
查看>>
[转] WinForm实现移除控件某个事件的方法
查看>>
使用PM2将Node.js的集群变得更加容易
查看>>
充满魅惑的GetType(VB2005)
查看>>
CSS hack
查看>>
ELK之日志查询、收集与分析系统
查看>>
VS NuGet使用
查看>>
对Prepared Statement 是否可以防止 SQL Injection 的实验
查看>>
第 20 章 Memcache
查看>>
解决python中文处理乱码,先要弄懂“字符”和“字节”的差别
查看>>
Linux~连接windows的ftp,unzip出现的问题
查看>>
将不确定变为确定~感谢异或,是你让我彻底摆脱“否定式”
查看>>
动态改变EnterpriseLibary数据库访问链接字符串的三种方法
查看>>
25.6. 数值函数
查看>>
进制转换
查看>>
原来JScript中的关键字'var'还是有文章的
查看>>