Entity Framework Core 2.0 使用入门
本文转载自作者:晓晨Master(李志强) 原文章地址
https://www.cnblogs.com/stulzq/p/7717873.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.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.打开程序包管理器控制台
,并选择对应的项目
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];
GOUSE [Blogging];
GOCREATE 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
转载于:https://www.cnblogs.com/andyzf/p/10893877.html
Entity Framework Core 2.0 使用入门相关推荐
- Entity Framework Core 2.0 使用代码进行自动迁移
一.前言 我们在使用EF进行开发的时候,肯定会遇到将迁移更新到生产数据库这个问题,前面写了一篇文章介绍了Entity Framework Core 2.0的入门使用,这里面介绍了使用命令生成迁移所需的 ...
- Entity Framework Core 2.0的新特性
虽然EF Core 2.0存在大量槽点,但是它也给出了不少亮点.在本文中,我们将介绍这次发布版的部分亮点. \\ 数据库表切分(Table Splitting) \\ ORM常被吐槽是总是对所请求数据 ...
- Entity Framework Core 6.0 预览4 性能改进
起因 微软在Build2021开发者大会上,发布Entity Framework Core 6.0(简称EFCore 6)预览第四版,号称是性能版本,性能提升主要对于Entity Framework ...
- Entity Framework Core 2.0 特性介绍和使用指南
前言 这是.Net Core 2.0生态生态介绍的最后一篇,EF一直是我喜欢的一个ORM框架,随着版本升级EF也发展到EF6.x,Entity Framework Core是一个支持跨平台的全新版本, ...
- Entity Framework Core 2.0 全局查询过滤器
本博文翻译自: http://gunnarpeipman.com/2017/08/ef-core-global-query-filters/ Entity Framework Core 2.0 全局查 ...
- Entity Framework Core 3.0 和 Entity Framework 6.3 正式发布
Entity Framework Core 3.0 和 Entity Framework 6.3 通用版发布了,接下来我们看看它的新内容: Entity Framework Core 3.0 EF C ...
- [转帖]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 ...
- Entity Framework Core 7.0 未来规划
Entity Framework Core 7.0(也称为 EF Core 7 或 EF7)的未来规划.该计划汇集了许多相关意见,并概述了微软打算在何处以及如何投资 EF7. IMPORTANT 此 ...
- Entity Framework Core 2.0 新特性
一.模型级查询过滤器(Model-level query filters) ef core2.0包含了一个新特性,我们叫他模型级查询过滤器(Model-level query filters).此特性 ...
最新文章
- sublime Text 2 配置以及 Python环境搭建
- 关于无法修改CheckBox样式的解决方案
- [笔试面试][code_by_hand]输出第二个字符串在第一个字符串中的连接次序
- html table导出到Excel中,不走后台,js完成
- 网络操作系统P12页答案
- Docker最全教程之Go实战,墙裂推荐(十九)
- 来自爸妈的敷衍问候!| 今日最佳
- 如何在注册表里计算机用户名,可以通过注册表修改电脑的密码 ?怎么做的?
- CentOS7 如何关闭防火墙
- 删除oracle怎么快,如何快速删除Oracle的好方法
- 回文绝对求下联:亚冠决赛决冠亚
- 【Docker】Docker 如何在容器内安装vi命令(vi不能使用)
- 老李分享知识:性能测试之TPS和吞吐率
- Android TV 开发 (1)
- numpy.mgrid的用法图解
- 『杭电1891』Tough Water Level
- 【项目实战】别出心裁的小程序简历,让面试官耳目一新(第一个自己独立完成的小程序)
- 关于货币流动的一点思考
- 不采用Matlab函数,自行设计基于双线性插值的图像放大程序
- php年份判断生肖,十二生肖查询年份表
热门文章
- echarts词云图形状_怎么用Python画出好看的词云图?
- 厦门理工学院计算机科学与技术专业,厦门理工学院计算机类(含计算机科学与技术、网络工程、空间信息与专业2016年在福建理科高考录取最低分数线...
- c语言逻辑运算类指令,组成原理第二章——计算机指令
- 中间件应用程序错误 修复方案_Qtum Neutron:新一代区块链虚拟机中间件会给Qtum带来哪些新功能?...
- flutter 按钮_flutter好用的轮子推荐二-点赞按钮动画
- java继承类大全_Java 面向对象继承部分(示例代码)
- oracle的clob赋值_Java处理(插入或修改)clob类型数据
- irobot擦地机器人故障_懒人必备神器,电动高频擦地,科沃斯地宝T8 AIVI扫地机器人...
- linux内核模块的优缺点
- java中各种vo举例_了解JAVA中的POJO,Entity,PO,VO,DTO,DM包括代码举例展示