EF Core 快速上手——EF Core的三種主要關系類型



系列文章

EF Core 快速上手——EF Core 入門

本節導航

  • 三種數據庫關系類型建模
  • Migration方式創建和習修改數據庫
  • 定義和創建應用DbContext
  • 將復雜查詢拆分為子查詢

  本章主要介紹如何使用EF Core進行數據庫讀取,俗稱查詢。您將創建一個數據庫,它包含EFCore中三種主要數據庫關系類型。在這個過程當中,你將學會使用EF Core 創建和改變數據庫的結構。

  接下來你將學習到如何使用EF Core訪問數據庫並從數據庫表中獲取數據。在查看用主數據加載相關數據的各種方法之前,你將了解EF Core查詢的基本格式。例如,第一章中加載與書關聯的作者。

  在學習加載關聯數據之后,你將着手構建更加復雜的查詢,而這些是圖書售賣網站運行起來所必須的。這將涉及到排序,過濾,和分頁,以及將這些單獨的查詢命令組合在一起以創建一個復合數據庫查詢。

2.1 場景設定——我們的圖書銷售網站

  本章,你將開始構建一個圖書銷售網站,我們稱之為Book APP。這個應用示例提供了一個非常好的工具來查看查詢中的關系。本節介紹數據庫、各種類以及Book App 訪問數據庫所需的EF Core 部分。

note:你可以在線訪問book app
http://efcoreinaction.com/

2.1.1 Book App 相關的數據庫

  盡管我們可以把一本書相關的信息,它的作者,評論都創建在一張表中,但是在關系型數據庫中那樣做不會運行良好,尤其是評論字段的長度是課變的。關系型數據庫范式會將重復數據拆分(比如,authors表)。

  我們有幾種方式可以把圖書的數據各個部分在數據庫中分類(存儲),但是對於本例,數據庫具有EF-Core關系中每種主要關系類型中的一種。這三種類型是:

  • 一對一關系:PriceOffer to a Book
  • 一對多關系:Reviews to a Book
  • 多對多關系:Books to Authors
一對一關系:PriceOffer to a Book

  一本書會有一個促銷價格。這是通過在PriceOffer*實體類增加一個可選字段實現的,這是一個一對一關心的例子(從技術上講,它是一對零或一關系,但是EF Core對它們的處理時一樣的)。請看圖2.1

使用場景

  為了計算這本你圖書的最終價格,你需要檢查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》

使用場景


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM