[翻译 EF Core in Action 2.1] 设置一个图书销售网站的场景

news/2024/5/12 1:46:54/文章来源:https://blog.csdn.net/weixin_33967071/article/details/93358619

Entity Framework Core in Action

Entityframework Core in action是 Jon P smith 所著的关于Entityframework Core 书籍。原版地址. 是除了官方文档外另一个学习EF Core的不错途径, 书中由浅入深的讲解的EF Core的相关知识。因为没有中文版,所以本人对其进行翻译。 预计每两天一篇更新 PS: 翻译难免限于本人水平有不准确的地方,建议英文水平不错的同学直接查看原版,有不足的地方欢迎指正

第一部分目录导航

假设场景 -- 图书销售网站

在本章中你会构建一个图书销售网站示例,称之为图书应用程序. 这个示例应用程序帮助我们查看查询中的关系. 本节中介绍了图书应用程序所需的数据库与EF Core的实体类部分

  • 这里是图书应用程序的运行实例 http://efcoreinaction.com

图书应用程序的关系型数据库

虽然我们可以将作者,书,评论等所有数据都放到一张表中,但在关系型数据库中这样设计是很糟糕的,关系型数据库的规范是分离重复的数据,例如作者

我们有多种方式在数据库设计图书数据的各种部分,在本例中的数据库具有EF Core的主要关系类型,分别是以下三种:

  • 一对一的关系: 书与优惠价格
  • 一对多的关系: 书与评价
  • 多对多的关系: 书与作者

一对一的关系: 书与价格

一个书可以有促销价格,这通过PriceOffers表的一个可选行实现的,这是一个一对一的例子(从技术来讲,这是一个1-0或1的关系,不过EF Core的处理方式是一样的);参见图2.1

832799-20190424135316758-1525903325.png

The PriceOffers table has a foreign key that links to the books table's primary key

  • PriceOffers表有一个连接到books表主键的外键

EF Core uses its conventions to detect that this is a one-to-one relationship. It therefore adds a unique index to the foreign key to ensure that there can only be one per book

  • EF Core使用它的约定来检测这是一个一对一的关系,因此它为外键添加了唯一索引,确保每本书只能有一个优惠价格

计算图书的最终价格,需要通过外键找到与图书链接的优惠价格记录. 如果找到了记录,NewPrice会取代原书的价格,并将PromotionalText显示到屏幕上; 例如:

原价¥40现价¥9.9 温州印书场倒闭了,老板带着小姨子跑路了. 原价都是四十五十的,现价只要九块九

一对多的关系: 书的评论

顾客可以评价一本书;他们可以评星级,也可以留文字评论. 因为一本书可能没有一个评论或者有很多(无限)的评论,所以需要创建一张表保存这些数据. 在本例中它是Review表. Books表与Review表是一对多的关系, 如图2.2所示

832799-20190424135333019-4804873.png

The Review table is linked to the Books table via the foreign key called BookId

  • Review表通过BookId外键链接到Books表

在显示图书介绍时,需要计算评论数量与平均星级评价. 这些通过一对多的关系去检索. 呈现在页面上是以下效果:

  • 平均分 4.5 共有1000用户评论

多对多的关系: 图书与作者

一书本可能由一个人编写也可能由多人编写, 一个人(作者)可以著作一本书或多本书. 这是一个典型的多对多关系,在数据库中Books表保存图书数据,Authors表保存作者. Books和Authors表之间的链接就是多对多关系. 它们之间需要一张中间表. 参见图2.3

832799-20190424135346171-619571042.png

The BookAuthor table is the key to creating the many-to-many relationship and is known as a linking table

  • BookAuthor表是多对多关系的核心,称为中间表

This table uses the foreign keys as the primary keys. Because primary keys must be unique, this ensures that only one link can exist between a book and an author

  • BookAuthor表使用外键做为主键,因为主键必须是唯一的, 所以确保了书和作者之间只能有一个链接

多对多关系的页面展示如下

  • 删库到跑路 - 我的程序一生 赵日天,萧炎,林动 著

EF6: 在EF6中定义多对多关系不需要链接类,EF6会自动创建隐藏的中间表.但是在EF Core中必须自己创建中间表

本章中未涉及的其他关系类型

使用EF Core你可以使用继承达到与之前一对一关系的类似结果,例如你可以将PriceOffer类继承自Book类. EF Core会使用第七章中介绍的table-per-hierarchy(TPH)实现. (子类和基类都需要包含在应用程序的DbContext中)

另一种是分层关系类型: 一组通过层次关系彼此关系的数据项目. 一个典型的例子是员工与经理,经理也是员工的一种. EF Core使用与一对五和一对多相同的方法来提供层次关系,在第七章详细讨论这类关系与如何配置

最终数据库的样子

图2.4展示了图书应用程序的数据库,在本章和第三章的示例中我们会使用到它. 图中包含了我们之前提到每张表与列的定义

832799-20190424135405058-882279717.png

注: PK表示主键,FK表示外键

为了帮助理解,图2.5展示了图片列表的输出(只有一书本). 图书应用程序需要访问数据库中的每一张表来构建图书列表,后面我会使用代码进行查询显示

832799-20190424135430514-1319179356.png

注: 你可以在http://efcoreinaction.com/查看在线的示例,会有助于你理解本章的剩余部分,你也可以在Github仓库中找到这个示例在本地调试运行

EF Core映射数据库的类

我创建5个类对应着灵气库中的5张表,分别是Book,PriceOffer,Review,Author和BookAuthor(多对多中间表)

这些类称之为实休类,以突出它们是由EF Core映射到数据库的. 从软件工程的角度来看实体类是普通的.Net类(有时也被称为POCO)并没有什么特别之处. 因为它们是EF Core映射到数据库中的类,所以对其与其他类区分,称为实体类

图书应用程序中主要的实体类是Book类,如下图所示. 它引用了PriceOffer类,Review类型的集合以及BookAuthor的集合

832799-20190424135525003-628834759.png

我们使用了EF Core的约定配置实体类的主键,也就是类中int类型的Id属性. 数据库在添加新行时使用 Sql Identity 命令创建唯一键

为了保持示例的简单,示例中使用了EF Core的约定配置方法对数据库建模. .Net类的导航属性(比如ICollection)定义了我需要关系类型,例如Reviews属性的类型是ICollection,所以是一对多关系. 第六章和第七章介绍了建模的其他方法

本文的示例介绍了如何通过EF Core定义和创建数据库,如果你已经有了一个现有数据库,可以使用EF Core的逆行工程数据库的功能根据数据库表构建DbContext类和实体类,在11.3节中会介绍到,如果你不希望EF Core更改数据库结果而是通过SQL脚本或数据库部署工具自己来管理,可以在11.4节中找到方法

转载于:https://www.cnblogs.com/LiangSW/p/10761977.html

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

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

相关文章

[Linux] Nginx服务下统计网站的QPS

单位时间的请求数就是QPS,那么在nginx服务的网站下,如果要统计QPS并且按从高到低排列,需要使用awk配合sort进行处理awk做的主要工作是把access每行日志按分隔符分开,然后循环每一行,存到一个数组里,如果只按时间不区分脚本路径,数组里存的数据是比如arr[[28/Nov/2019:14:12:23]…

大型网站技术架构(六)网站的伸缩性架构

2019独角兽企业重金招聘Python工程师标准>>> 网站系统的伸缩性架构最重要的技术手段就是使用服务器集群功能,通过不断地向集群中添加服务器来增强整个集群的处理能力。“伸”即网站的规模和服务器的规模总是在不断扩大。 1、网站架构的伸缩性设计 网站的…

转 nginx实现网站负载均衡(windows+IIS负载实测)

如果你关注过nginx,必定知道nginx这个软件有什么用的,如果你的网站访问量越来越高,一台服务器已经没有办法承受流量压力,那就增多几台 服务器来做负载吧。做网站负载可以买硬件设备来实现,比如F5,不过价格就几十万到上…

大型网站架构

引用:http://kb.cnblogs.com/page/99549/ 之前我简单向大家介绍了各个知名大型网站的架构,MySpace的五个里程碑、Flickr的架构、YouTube的架构、PlentyOfFish的架构、WikiPedia的架构。这几个都很典型,我们可以从中获取很多有关网站架构方面的…

经典网页设计:25个精美的全屏背景网站设计作品

在网页中使用精美的全屏背景能给访客浏览深刻的印象,带给访客震撼的视觉感受。当然,大尺寸的图片用在网站中也会有加载缓慢的问题,不过使用全屏背景仍然是一个非常不错的方式。今天这篇文章收集了25个非常精美的全屏背景网站设计作品分享给大…

SEO是一件需要细心的事情

刚开的博客,还不知道写点什么,就胡乱写点关于SEO的想法。SEO是什么? 很多人都知道,就是搜索引擎优化,就是针对搜索引擎的胃口优化我们自己的站点页面,让搜索引擎更多的收录站点里的页面,更好的提高页面的搜…

【转】大型网站架构演变和知识体系

本文转自:http://www.blogjava.net/BlueDavy/archive/2008/09/03/226749.html 之前也有一些介绍大型网站架构演变的文章,例如LiveJournal的、ebay的,都是非常值得参考的,不过感觉他们讲的更多的是每次演变的结果,而没有…

轻量完善的网站在线客服系统源码实现-GOFLY实现浏览器通知栏

GOFLY在线客服,是一套可私有化部署的开源客服系统,安装过程不超过五分钟,基于Golang开发,二进制文件可直接使用无需搭开发环境,下载zip解压即可,仅依赖MySQL数据库,是一个开箱即用的网页在线客服…

网站在线客服系统源码|在线客服代码下载 (2021最新版)

GOFLY,一套可私有化部署的免费开源客服系统,基于Golang开发,编译后的二进制文件可直接使用无需搭开发环境,下载zip解压即可,仅依赖MySQL数据库,是一个开箱即用的网页在线客服系统,致力于帮助广大…

网站客服系统_网页客服系统安装使用_GOFLY在线客服系统

GOFLY提供网站客服系统,网页客服系统 GOFLY,一套可私有化部署的免费开源客服系统,基于Golang开发,编译后的二进制文件可直接使用无需搭开发环境,下载zip解压即可,仅依赖MySQL数据库,是一个开箱即…

经典网页设计:顶尖的个人作品集网站设计欣赏【上篇】

作为一个网页设计师,需要经常去关注优秀的网站作品,获取创作灵感,掌握最新的设计趋势。在这个竞争激烈的就业市场,个人作品集网站是最好的求职工具。因此,设计师们都竭尽所能设计一个有创造性的个人作品展示网站&#…

网站在线客服系统GOFLY源码开发日志- 5. gin框架整合守护进程

我的项目使用的是 gin 框架,默认开发情况下运行起来还是没有大问题的,go run xxx.go 开着命令窗口,然后去浏览器访问就行了。现在想要把服务部署到服务器,这个命令窗口可就不能保证一直运行了。 让进程后台运行很简单,…

GOFLY在线客服系统/外贸网站在线客服+多语言支持 外贸网站即时通讯工具/中英文切换教程...

GOFLY在线客服系统支持多语言展示,特别适合外贸网站和访客即时通讯沟通 访客界面切换成英文的方式方法 访客链接url参数中增加langen,界面就会切换成英文; 底部版权中文字符,管理员可以在后台改成英文的名称; 在线客服…

滚动视差网站欣赏

视差滚动(Parallax Scrolling)是指让多层背景以不同的速度移动,形成立体的运动效果,带来非常出色的视觉体验。作为今年网页设计的热点趋势,越来越多的网站应用了 这项技术。今天这篇文章就与大家分享30个视差滚动效果的…

国内多地测试网站访问速度

有时候我们项目在本地域挺快的,但是在国内其他地方就比较慢 这个时候可以使用下面的网站测试,能测试其他地方的访问速度 https://www.17ce.com/ 我的在线客服系统效果如图:

wordpress网站主题安装教程

前面已经搭建好了网站,但是默认的页面比较简陋,我们需要更改一下外观 现在我们安装新的主题外观,使网站更加的好看 下载主题 https://www.lovestu.com/corepress-free 可以使用上面的免费主题,直接下载.zip 安装主题 在wordpress后…

网站在线客服系统源码 | 全渠道在线客服代码下载 (最新版支持外贸商城/H5/小程序/公众号对接)...

gofly.v1kf.com 是一款基于GolangVue开发的在线客服系统,软件著作权编号:2021SR1462600。一套可私有化部署的在线客服系统,编译后的二进制文件可直接使用无需搭开发环境,下载zip解压即可,仅依赖MySQL数据库&#xff0c…

手把手教你设计交友网站【5】

2019独角兽企业重金招聘Python工程师标准>>> 说到信息构架,不得不让人第一眼想到的是网站的红红绿绿。网民不晓得这样那样的术语,啥叫扁平化、啥叫通透性,啥叫二秒原则、三次点击原则,反正是看的舒服,操作的…

在wordpress开发的网站中添加在线客服咨询功能代码教程

现在主流的PHP建站程序wordpress还是非常的流行,使用的人非常多 如何在wordpress网站中增加在线客服咨询功能 第一步:在唯一客服系统(gofly.v1kf.com)中注册账号,获取到客服js部署代码 第二步:wordpress后台添加客服代码 登录到网…

客服弹窗中使用layer库自定义展示的标题 - 网站/网页在线客服源码教程

我在实现客服系统的过程中&#xff0c;使用layer实现右下角弹窗效果&#xff0c;现在需要自定义layer弹窗的标题和增加自定义按钮 layer.open({type: 2,title: My Window<button class"btn btn-primary" id"btn-reload">Reload</button>, // 在…