- 简介
- 安装 EF Core 包
- 基础概念
- 创建数据模型
- 迁移模型到数据库
- 增
- 删
- 改
- 查
- SQL
- 结语
一、简介
EF Core 既 Entity Framework Core,是轻量化、可扩展、开源和跨平台的 .NET 平台 O/RM 数据访问技术。它最主要的功能是可以实现以下两点:
- 使 .NET 开发人员能够使用 .NET 对象来处理数据库数据。
- 绝大多数情况下无需再像以前那样编写数据访问代码(sql或其他查询语句)。
EF Core 支持绝大多数的数据库,你可以在下面的链接中找到它所支持的数据库的清单。
数据库提供程序 - EF Coredocs.microsoft.com另外 EF Core 项目的 Github 地址是,
dotnet/efcoregithub.com二、安装 EF Core 包
要使用 EF Core 你需要在项目中安装 Microsoft.EntityFrameworkCore 包以及数据提供程序。在 Visual Studio 中你可以使用 NuGet 包管理器来进行安装,如果你使用的是 SQL Server 你需要安装包 Microsoft.EntityFrameworkCore.SqlServer 这是 SQL Server 数据库提供程序包;如果使用 SQLite 则需安装 Microsoft.EntityFrameworkCore.SQLite 。
点击安装后,NuGet 包管理工具会自动安装该包的其他依赖。安装成功后便可开始编码了。
三、基础概念
Context/上下文
一个 Context 是一个继承自 DbContext 的非抽象类。这个类的功能首先是公开所有实体的集合,操作这些集合可以在存储中读取或保存数据,除此之外 Context 保存数据的模型。在使用前需要正确配置各个实体的模型以及其他必要的配置。
public
Context 以 DbSet <T> 属性的形式公开实体的集合,上面代码中的 Blog,Post,BlogImage 便是实体类型。Context 的另一个重要的功能就是跟踪对实体的更改,以便我们在保存更改时,它知道该如何处理。
Context 跟踪的每个实体所处的以下状态之一:未更改/added,已修改/modified,已添加/added,已删除/deleted或已分离/detached。可以将上下文视为沙箱,我们可以在其中对实体集合进行更改,然后通过一次保存操作应用这些更改。
DbContext 类型的基础方法
EF Core 的 DbContext 类型包含一些会在特定时候调用的基础方法:
- OnConfiguring 方法:当 context 需要配置它的 provider 和 链接字符串的时候,该方法会被调用,这为开发者提供了介入的入口。
- OnModelCreating 方法:在 EF Core 组装数据模型时会被自动调用,你将会在这个方法里添加构建模型的代码。
- SaveChanges 方法:当我们希望将修改保存到数据库时进行调用。 返回为受保存操作影响的记录数。
Database Provider / 数据库提供程序
EF Core 是“数据库无关”的,这意味着每个要“接入”它的数据库厂商或任何的第三方都要提供它们的“数据库提供程序”以让 EF Core 可以使用它们。
微软提供了包括 SQL Server、Azure SQL Database、SQL Server Express、SQL Server Express LocalDB、SQLite 以及 In Memory 在内的“官方”数据库提供程序。
配置数据库提供程序首先要确定数据库提供程序包已经安装在项目中,然后只需要在 Context 的 OnConfiguring 方法中添加对应的配置方法(SqlServer 为 UseSqlServer)即可。
本小节示例代码:
public
下面开始创建数据库实体模型。
四、创建数据模型
创建数据模型首先需要创建实体(Entity)类型,通常情况下一个实体是一个业务数据对象,其数据通常可以保存在一张表中。以下代码就是我们演示所用的实体类型,
public
有了实体类型后就需要配置实体属性以及实体之间的相互关系,这也是数据模型非常重要的一部分,它对应了关系数据库的字段与表关系。可以通过两种方法来进行配置,一种是使用 fluent API 来配置模型,另一种是使用数据注释(Data Annotation)来配置模型。下面的演示代码中混合使用了两种方式。
实体类的配置:表名,表架构
//配置映射表名
使用 Fluent API 你还可以配置模型级别的默认架构,而不需为每个表配置架构:
protected
实体属性的配置:主键,列名,字段类型及长度,必要
public
这些用于配置的特性(Attribute)主要位于 System.ComponentModel.DataAnnotations 和 System.ComponentModel.DataAnnotations.Schema 命名空间内。
实体引用(引用导航属性)配置:一对一
//一Blog 对应 一个 Customer
实体集合(集合导航属性)配置:一对多
//实体集合属性的配置
下面的代码是用于后续演示的模型完整代码,该演示模型使用SQLite数据库。
public
下面开始将代码模型“迁移”到数据库中。
五、迁移模型到数据库
完成模型代码的编写后,我们需要使用 dotnet ef 工具将模型“迁移”到数据中,使用简单的命令行即可安装这个工具,除此之外需要在项目中安装Microsoft.EntityFrameworkCore.Design 包。按照下面的流程便可快速完成“迁移”的过程。
#该命令行用于安装 dotnet-ef 工具
dotnet tool install --global dotnet-ef
工具和所需包的安装后便可以开始正式的“迁移”,以下命令需要在项目目录下运行。
#添加一个migration
dotnet ef migrations add InitialCreate
Build started...
Build succeeded.
Done. To undo this action, use
运行上面的命令后,dotnet ef 工具会在项目中创建一个名为“Migrations”的目录,并生成一些文件。你可以检查生成的内容,并在需要的情况下修改它。
#同步添加的migration到数据库
dotnet ef database update
Build started...
Build succeeded.
Applying migration
成功完成该命令后数据库便创建完成。
在实际项目中,数据模型随着功能的实现而变化:添加和删除新的实体或属性,并且需要相应地更改数据库架构,使其与应用程序保持同步。 EF Core 的迁移功能能够以递增方式更新数据库架构,使其与应用程序的数据模型保持同步,同时保留数据库中的现有数据。
简要地说,迁移的方式如下:
- 当数据模型更改时,开发人员使用 EF Core 工具添加相应的“迁移”,以保存能让数据库架构保持同步所需的更新。EF Core 会将当前模型与旧模型的快照进行比较,以确定差异,并生成迁移所需的源文件。这些“迁移”文件可在项目的源代码管理中进行跟踪。
- 生成新的迁移后,可通过多种方式将其应用于数据库。 EF Core 在一个特殊的历史记录表中记录所有应用的迁移,使其知道哪些迁移已应用,哪些迁移尚未应用。
更多关于模型迁移的内容可查看下面的文档,
管理迁移-EF Coredocs.microsoft.com顺便说一下:如何你愿意,完全可以手动创建和更改数据库以使其和模型同步。
下面开始以实例代码的方式说明 EF Core 增删改查的简单使用。
六、增
新增单个实体
BlogContext
新增单个实体及引用实体(一对一)
BlogContext
新增实体及集合引用(一对多)
BlogContext
七、删
删除单个实体
BlogContext
使用 SQL 删除
BlogContext
八、改
修改实体
BlogContext
九、查
主键查询
BlogContext
模糊查询
BlogContext ctx = new BlogContext();
var blogs = ctx.Blogs.Where(b => b.Name.Contains("name")).ToList();
使用 EF.Functions.Like 进行部分匹配
BlogContext
查询实体时获取引用实体及引用集合,默认情况下一个引用实体(Blog)时并不会获取它的引用实体(BlogImage),你需要在查询时显示指定所需要查询的引用实体。
//查询Blog使用Include显示指定获取其引用属性Image(BlogImage)
十、SQL
执行 SQL 以获取实体
BlogContext
执行 SQL 语句
BlogContext
十一、结语
本篇介绍了 EF Core 的主要概念与简单的使用,希望能对你开始使用 EF Core 有所帮助。接下来的文章会根据实际使用场景介绍进阶的特性与使用方法。
如果在阅读本文的过程中发现任务错误或有任何问题请不吝在评论中留言,我会尽量回复。
一些参考资料地址,
入门 - EF Coredocs.microsoft.com