Entity Framework Core 2.0 使用入门

摘要:
一.前言EntityFramework作为微软家的ORM,自然而然从.NETFramework延续到了.NETCore。关于EFCore2.0的新特性请看:http://www.cnblogs.com/stulzq/p/7366044.html二.控制台程序使用EFCore1.新建一个.NETCore控制台程序2.通过Nuget安装EFCoreSqlServer请安装Microsoft.EntityFrameworkCore.SqlServerMySql/MariaDB请安装Pomelo.EntityFrameworkCore.MySqlMySql/MariaDB推荐使用PomeloEFCore组件,因为官方的目前可能存在bug,PomeloEFCore同样是微软官方所推荐的。
一.前言

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

Entity Framework Core 2.0 使用入门第1张

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

Entity Framework Core 2.0 使用入门第2张

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

Entity Framework Core 2.0 使用入门第3张

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

Entity Framework Core 2.0 使用入门第4张

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

Entity Framework Core 2.0 使用入门第5张

五.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语句如下图:

Entity Framework Core 2.0 使用入门第6张

还有一种方法就是通过代码进行自动迁移,这里暂时不做叙述,后面的文章会详细介绍。

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

Entity Framework Core 2.0 使用入门第7张

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

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

免责声明:文章转载自《Entity Framework Core 2.0 使用入门》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇安卓开发实战-记账本APP(六)javase:习题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

来个干货——使用VS2019发布.NET Core程序并部署到IIS的最新教程

使用VS2019发布.NET Core程序并部署到IIS,不管你是使用.NET Core开发的是Web API还是网站类的程序,如果你是部署到IIS,那么下面的内容都适合于你,不会将.NET Core程序部署到IIS上的小伙伴们,可以看看了。 将.NET Core程序部署到IIS总体需要经过三大步骤 1、安装IIS和.NET Core运行时程序 2、以文件...

【面试题】新东方.NET工程师面试题总结

1、学校几本(是否统招)、英语等级、大学成绩排名Top%几、当前月薪(入职前是否能提供薪资证明材料)、期望月薪 二本,统招英语四级排名top10 2、做过的项目技术栈是什么?(例如 .NET、Sql Server、Dapper、EF、Redis……) .NET、C#、EF、MVC、SQL Server、Oracle、WebService、API、SDK、R...

EF里的继承映射关系TPH、TPT和TPC的讲解以及一些具体的例子

本章节讲解EF里的继承映射关系,分为TPH、TPT、TPC。具体: 1.TPH:Table Per Hierarchy 这是EF的默认的继承映射关系:一张表存放基类和子类的所有列,自动生成的discriminator列用来区分基类和子类的数据。新建一个度假村Resort实体类试试: /// <summary> /// 度假村类...

ASP.NET CORE中使用Cookie身份认证

大家在使用ASP.NET的时候一定都用过FormsAuthentication做登录用户的身份认证,FormsAuthentication的核心就是Cookie,ASP.NET会将用户名存储在Cookie中。 现在到了ASP.NET CORE的时代,但是ASP.NET CORE中没有FormsAuthentication这个东西,那么怎么做身份认证呢?答案...

ASP.NET Core MVC中Hangfire及EF Core的简单使用

项目中可能要实现定时读写数据,所以了解了一下Hangfire,并简单尝试使用,同时又实践了一波EF Core的DB First模式 Hangfire 1.新建ASP.NET Core项目 2.Nuget安装Hangfire的包,因为我Hangfire配置用数据库使用的PostgreSql,所以添加的pg相关的引用,Hangfire官方支持SQL Serve...

Android源码分析(二)-----如何编译修改后的framework资源文件

一 : 编译framework资源文件 如果修改android framework资源文件,需要先编译资源文件,然后再编译framework才可以正常引用,进入项目目录 cd work/source/frameworks/base/core/res/ 执行mm 编译 framework-res.apk(原生或高通)编译完后com.android.inte...