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

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]) ); 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文件夹,下面有创建的实体和数据库上下文。

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

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


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


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/323180.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaFX中WebView的java与JS代码互相调用

java代码 package main;import javafx.application.Application; import javafx.beans.value.ObservableValue; import javafx.concurrent.Worker; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.VBox; import javafx.scene.w…

Jexus~docker与它产生了暖味

前段时间写了很多docker for .net core的文章&#xff0c;用来快速部署微服务相当给力&#xff0c;而尝到了香头的我们希望把.net frameworks的程序也使用docker来部署一下&#xff0c;那么接下来我就结果一下&#xff0c;在linux,docker上运行和部署.net frameworks应用程序的…

ABP从入门到精通(1):aspnet-zero-core项目启动及各项目源码说明

一.ABP的简单介绍 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称。 ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应用程序的新起点&#xff0c;它旨在成为一个通用的WEB应用程序框架和项目模板。 ASP.NET Boilerplate 基于DDD的经典分层架构思想…

【Python】Scrapy的安装与使用

scrapy的安装 不得姐网站 直接用命令 pip install scrapy 网络可能较慢&#xff0c;等等就好 另外windows环境下你还需要安装win32 我之前就是因为没有安装这个库&#xff0c;白忙活了一天&#xff0c;一直都是报错状态 pip install pypiwin32 scrapy的使用 cd到卓面或者其他…

[译]ASP.NET Core 2.0 带初始参数的中间件

问题 如何在ASP.NET Core 2.0向中间件传入初始参数&#xff1f; 答案 在一个空项目中&#xff0c;创建一个POCO&#xff08;Plain Old CLR Object&#xff09;来保存中间件所需的参数&#xff1a; public class GreetingOptions { public string GreetAt { get; set; } …

框架学习与探究之AOP--Castle DynamicProxy

前言 先说一点废话&#xff0c;在此之前博主也在早期就接触了或者看了些许AOP相关的文章&#xff0c;然后再去做了一些相关的实验&#xff0c;但是始终没有将AOP内化到自己的内功心法当中去&#xff0c;包括从概念还是应用环境&#xff0c;以及当前生态当中的AOP工具等等&#…

【LSB】图片隐写文档大纲

第一章 绪论 1.1研究背景 1.2研究意义 1.3主要工作 第二章 图片隐写和LSB算法 2.1关于图片隐写术 2.2LSB算法 第三章 系统设计与实现 3.1图像的加载 3.2文本的预编码 3.3文字编码 3.4图片编码 第四章 功能测试及线上部署 4.1功能测试 4.2线上部署 第五章 总结及展望 5.1总结…

.NET下使用HTTP请求的正确姿势

一、前言 去年9月份的时候我看到过外国朋友关于.NET Framework下HttpClient缺陷的分析后对HttpClient有了一定的了解。前几日也有园友写了一篇关于HttpClient的分析文章, 于是我想深入探索一下在.NET下使用HTTP请求的正确姿势。姿势不是越多越好, 而在于精不精。如果不深入了解…

【LSB】图片隐写主体函数

关于图像隐写 图像隐写是一种有效的方式来交换隐藏的消息&#xff0c;而不会引起怀疑。它的工作原理是用lbs算法将消息编码为图像像素的颜色值。 这种功能基于浏览器的最新特性比如File API和Canvas&#xff0c;如果你的浏览器不支持该该功能&#xff0c;请下载最新的浏览器。…

【Ajax】创建并封装

创建 <!DOCTYPE html> <html> <head><title></title><style>#button1{background:skyblue;border-radius:20px;width:100px;}</style> </head> <body> <button id"button1">按钮</button> <i…

ABP从入门到精通(2):aspnet-zero-core 使用MySql数据库

关于 asp.net zero core 项目的启动及说明&#xff0c;请观看我前面的博文ABP从入门到精通&#xff08;1&#xff09;&#xff1a;aspnet-zero-core项目启动及各项目源码说明 本操作对于ABP默认项目应该也是适用的&#xff01; 一.移除默认的SqlServer相关程序包 需要移除“MyC…

Visual Studio 15.5预览版先睹为快

Microsoft延续了Visual Studio 2017快速迭代开发的步伐&#xff0c;最新发布了15.5预览版&#xff0c;这是VS2017这一广受欢迎的IDE自发布以来的第五次更新&#xff0c;该预览版的发布使用户可以先睹为快。 该预览版启用了一个称为“Stepping Back”的调试历史新特性。IntelliT…

【Android】实现页面跳转

对比html&#xff0c;安卓的页面跳转要难的多。 html只需要一个a标签即可实现页面的跳转&#xff0c;而安卓要分三步走 第一步 在activity_main.xml创建一个按钮 <Buttonandroid:id"id/btn1"android:layout_width"match_parent"android:layout_heigh…

ABP从入门到精通(3):aspnet-zero-core 使用Redis缓存

一.Redis是什么&#xff1f; redis是一个key-value存储系统。和Memcached类似&#xff0c;它支持存储的value类型相对更多&#xff0c;包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash&#xff08;哈希类型&#xff09;。这些数据类型都支持pus…

【Mysql】win10上Mysq的l安装

最近想学习java的jdbc&#xff0c;完成注册登录系统&#xff0c;有了php的经验&#xff0c;&#xff0c;就简单多。但是php是基于wamp集成环境的&#xff0c;当时就是由于win10安装mysql老是错误&#xff0c;所以选择了集成环境&#xff0c;这对入门来讲降低了很大的难度。这次…

Entity Framework Core 2.0 使用代码进行自动迁移

一.前言 我们在使用EF进行开发的时候&#xff0c;肯定会遇到将迁移更新到生产数据库这个问题&#xff0c;前面写了一篇文章介绍了Entity Framework Core 2.0的入门使用&#xff0c;这里面介绍了使用命令生成迁移所需的SQL&#xff0c;然后更新到生产数据库的方法。这里还有另一…

【JDBC】各版本jar包下载网址及Tomcat下载

http://central.maven.org/maven2/mysql/mysql-connector-java/ 自己的mysql的版本号会在登录之后显示 Tomcat链接&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1bOMY_6hp7nV5KpU496YPlA 提取码&#xff1a;rerg

Mybatis中强大的功能元素:resultMap

转载自 Mybatis中强大的功能元素&#xff1a;resultMap 前言 在Mybatis中&#xff0c;有一个强大的功能元素resultMap。当我们希望将JDBC ResultSets中的数据&#xff0c;转化为合理的Java对象时&#xff0c;你就能感受到它的非凡之处。正如其官方所述的那样&#xff1a; re…

将编号为0和1的两个栈存放于一个数组空间V[m]中。

目录 1.题目描述 2.算法实现 1.题目描述 将编号为0和1的两个栈存放于一个数组空间V[m]中,栈底分别处于数组的两端。当第0号栈的栈顶指针top[0]等于-1时该栈为空&#xff1b;当第1号栈的栈顶指针top[1]等于m时该栈为空。两个栈均从两端向中间增长&#xff08;见图&#xff09;…

ASP.NET Core 2.0 依赖注入

问题 如何使用 ASP.NET Core 服务容器进行依赖注入&#xff1f; 答案 创建一个服务 public interface IGreetingService { string Greet(string to); } public class GreetingService : IGreetingService { public string Greet(string to){ return $"H…