EF Core 快速上手——EF Core的三种主要关系类型


系列文章

EF Core 快速上手——EF Core 入门数据库

本节导航

  • 三种数据库关系类型建模
  • Migration方式建立和习修改数据库
  • 定义和建立应用DbContext
  • 将复杂查询拆分为子查询

  本章主要介绍如何使用EF Core进行数据库读取,俗称查询。您将建立一个数据库,它包含EFCore中三种主要数据库关系类型。在这个过程中,你将学会使用EF Core 建立和改变数据库的结构。app

  接下来你将学习到如何使用EF Core访问数据库并从数据库表中获取数据。在查看用主数据加载相关数据的各类方法以前,你将了解EF Core查询的基本格式。例如,第一章中加载与书关联的做者。工具

  在学习加载关联数据以后,你将着手构建更加复杂的查询,而这些是图书售卖网站运行起来所必须的。这将涉及到排序,过滤,和分页,以及将这些单独的查询命令组合在一块儿以建立一个复合数据库查询。布局

2.1 场景设定——咱们的图书销售网站

  本章,你将开始构建一个图书销售网站,咱们称之为Book APP。这个应用示例提供了一个很是好的工具来查看查询中的关系。本节介绍数据库、各类类以及Book App 访问数据库所需的EF Core 部分。学习

note:你能够在线访问book app
http://efcoreinaction.com/网站

2.1.1 Book App 相关的数据库

  尽管咱们能够把一本书相关的信息,它的做者,评论都建立在一张表中,可是在关系型数据库中那样作不会运行良好,尤为是评论字段的长度是课变的。关系型数据库范式会将重复数据拆分(好比,authors表)。this

  咱们有几种方式能够把图书的数据各个部分在数据库中分类(存储),可是对于本例,数据库具备EF-Core关系中每种主要关系类型中的一种。这三种类型是:.net

  • 一对一关系:PriceOffer to a Book
  • 一对多关系:Reviews to a Book
  • 多对多关系:Books to Authors
一对一关系:PriceOffer to a Book

  一本书会有一个促销价格。这是经过在PriceOffer*实体类增长一个可选字段实现的,这是一个一对一关心的例子(从技术上讲,它是一对零或一关系,可是EF Core对它们的处理时同样的)。请看图2.13d

使用场景

  为了计算这本你图书的最终价格,你须要检查PriceOffer表的一行数据,它们是经过外键关联的。若是这行被查到有数据,NewPrice字段的数据将被查到的价格替代,PromotionalText的值将会在屏幕上显示,好比:
$40 $30 Our summertime price special, for this week only!对象

一对多关系:Reviews TO A Book

  你容许用户对图书予以评论。他们能够给书评星级并能随意评论。由于一本书能够有零个或多个(不限制数量)评论,你须要建立一个表来存储上这些数据。本示例中,这张表能够命名为ReviewBooks表相对于Review表是一对多的关系。以下图2.2所示:

使用场景

  你须要在摘要显示中,您须要计算评论的数量并计算出平均星级,以显示摘要。例如,这里有一个典型的屏幕显示,你可能从这一对多的关系中产生,以下:

Votes 4.5 by 2 customers

多对多关系: BOOKS TO AUTHORS

  图书能够被一名或者多名写做,一个做者能够些一本或多本图书。所以,须要一张Books表来存储书本数据,另外一张表Authors存储做者数据。Books表和Authors表之间连接的表称为连接表。

使用场景

  此关系的典型屏幕显示以下

by Dino Esposito, Andrea Saltarello

2.1.2 本章未涉及的其余关系类型

  在EF Core中,你能够定义一个实体类,而这个是实体类继承自另外一个实体类。例如,你能够定义PriceOffer继承至BooK.那样会得到和此前一对一关系同样的结果。EFCore经过每一个层次结构一个表(TPH)的模式实现,这个在第七章会涉及到。

  另外i一种关系类型是分层关系:一组数据项经过层次结构相互关联。一个典型的实例是Employee类。它有一个指向员工经理的关系,而经理反过来又是员工(注:这种关系可能叫自关联)。

  EF Core使用与一对一和一对多相同的方法来提供层次关系。在第七章,我会更多谈论这个关系,在那里,我会解释如何配置。

2.1.3 最终的数据库展现全部表

  图2.4 展现了Book App的数据库,这个数据库将用于本章和第三章的实例。它包含全部已描述的表,包括完整的books表中全部列的定义

NOTE:

这个数据库关系图使用了和第一章相同的布局和术语。PK表示主键,FK表示外键。

使用场景

  为了帮助你理解这个数据库,图2.5展现了输出到屏幕的图书列表,可是请将目光聚焦到一本书上。

使用场景

2.1.4 EF Core映射到数据库的类

  我建立了5个可以映射到数据库中五个表的类。它们是Book,PriceOffer,Review , Author,BookAuthor是多对多关系表。

  这些类被称为实体类,以代表它们被EF Core映射到了数据库。从软件视角,这些类没有什么特别之处。它们是常规的.NET类,有时被称为简单传统 CLR 对象(Plain Old CLR Object / POCO)。实体类标志着这个类是EF Core映射到数据库的类。

  主实体类是Book类,以下展现。你能够看到,它关联了一个实体类PriceOffer,一个Review实体类的集合和BookAuthor实体类的集合。BooKAuthor将Book类连接到一个或多个Author.

  为了简单起见,咱们使用ef core的契约配置方法对数据库建模。咱们使用EF Core按照惯例来命名实体类的主键和外键的属性。此外,.net 的导航属性,例如ICollection Reviews,定义了咱们想要的关系类型。例如,Reviews属性的类型是ICollection ,这个关系是一对多关系。第6章和第7章描述了其它方式来定义EF Core的数据库模型。

使用场景

参考

  •   《Entity Framework Core In Action》

使用场景

相关文章
相关标签/搜索