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.SqlServerMySql/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.打开程序包管理器控制台,并选择对应的项目

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
Entity Framework Core 2.0 使用入门的更多相关文章
- Entity Framework Core 2.0 使用代码进行自动迁移
一.前言 我们在使用EF进行开发的时候,肯定会遇到将迁移更新到生产数据库这个问题,前面写了一篇文章介绍了Entity Framework Core 2.0的入门使用,这里面介绍了使用命令生成迁移所需的 ...
- Entity Framework Core 2.0 全局查询过滤器
不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻喷,如觉得我翻译有问题请挪步原博客地址 本博文翻译自: http://gunnarpeipman.com/2017/08/ef ...
- .Net Core 2.0生态(4):Entity Framework Core 2.0 特性介绍和使用指南
前言 这是.Net Core 2.0生态生态介绍的最后一篇,EF一直是我喜欢的一个ORM框架,随着版本升级EF也发展到EF6.x,Entity Framework Core是一个支持跨平台的全新版本, ...
- Entity Framework Core 2.0 中使用LIKE 操作符
Entity Framework Core 2.0 中使用LIKE 操作符 不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻喷,如觉得我翻译有问题请挪步原博客地址 本博文翻译 ...
- ASP.Net Core项目在Mac上使用Entity Framework Core 2.0进行迁移可能会遇到的一个问题.
在ASP.Net Core 2.0的项目里, 我使用Entity Framework Core 2.0 作为ORM. 有人习惯把数据库的连接字符串写在appSettings.json里面, 有的习惯写 ...
- ASP.NET Core 1.0、ASP.NET MVC Core 1.0和Entity Framework Core 1.0
ASP.NET 5.0 将改名为 ASP.NET Core 1.0 ASP.NET MVC 6 将改名为 ASP.NET MVC Core 1.0 Entity Framework 7.0 将 ...
- [转帖]2016年时的新闻:ASP.NET Core 1.0、ASP.NET MVC Core 1.0和Entity Framework Core 1.0
ASP.NET Core 1.0.ASP.NET MVC Core 1.0和Entity Framework Core 1.0 http://www.cnblogs.com/webapi/p/5673 ...
- 【EF】Entity Framework Core 2.0 特性介绍和使用指南
阅读目录 前言 获取和使用 新特性 项目升级和核心API变化 下一步计划 遗憾的地方 回到目录 前言 这是.Net Core 2.0生态生态介绍的最后一篇,EF一直是我喜欢的一个ORM框架,随着版本升 ...
- Entity Framework Core 2.0 入门简介
不多说废话了, 直接切入正题. EF Core支持情况 EF Core的数据库Providers: 此外还即将支持CosmosDB和 Oracle. EFCore 2.0新的东西: 查询: EF.Fu ...
随机推荐
- 201521123104《JAVA程序设计》第三周学习总结
1. 本周学习总结 2. 书面作业 Q1. 代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; ...
- 201521123002《Java程序设计》第14周学习总结
本次作业参考文件 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. MySql数据库简单操作: 库操作: 显示所有数据库: show databases; 创建数 ...
- 201521123067 《Java程序设计》第12周学习总结
201521123067 <Java程序设计>第12周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对 ...
- 解决liblzo2.so缺失
系统:CentOS5.8 提示错误: error while loading shared libraries: liblzo2.so.2: cannot open shared object fil ...
- Java:验证在类继承过程中equals()、 hashcode()、toString()方法的使用
以下通过实际例子对类创建过程汇中常用的equals().hashcode().toString()方法进行展示,三个方法的创建过程具有通用性,在项目中可直接改写. //通过超类Employee和其子类 ...
- 接口测试入门(4)--接口自动化测试框架 / list和map用法 / 随机选取新闻 (随机数生成) / 接口相关id映射
一.接口自动化测试框架 为了更好的组织测试方法,测试用例并且持续集成,我们选择了 java+testNG(测试用例组织)+gitlab(代码版本管理)+Jenkins(持续集成工具) 作为一整套的自 ...
- powerdesigner逆向工程 oracle
我们已经有了数据库,希望使用powerdesigner工具生成pdm文件. 本文使用的版本是 15.0 1, File-->Reverse Engineer-->Database... ...
- activiti07- Task
任务 用户任务: 用户任务,用来对那些需要人参与完成的工作进行建模.当流程执行到这样的用户任务时,会在被分配到该任务的用户或用户组的任务列表中创建新的任务. 用户任务中可以包含描述.事实上,任何BPM ...
- 【漏洞公告】CVE-2017-12615/CVE-2017-12616:Tomcat信息泄漏和远程代码执行漏洞
2017年9月19日,Apache Tomcat官方确认并修复了两个高危漏洞,漏洞CVE编号:CVE-2017-12615和CVE-2017-12616,该漏洞受影响版本为7.0-7.80之间,在一定 ...
- 短视频图像处理 OpenGL ES 实践
2017年,短视频正以其丰富的内容表现力和时间碎片化的特点,快速崛起,而短视频最具可玩性之处就在支持人脸识别的动态贴图和各种不同效果的美颜.滤镜等.那短视频动态贴纸.滤镜.美颜等功能究竟是如何实现的呢 ...