本章主要介紹如何使用EF Core進行數據庫讀取,俗稱查詢。您將建立一個數據庫,它包含EFCore中三種主要數據庫關係類型。在這個過程中,你將學會使用EF Core 建立和改變數據庫的結構。app
接下來你將學習到如何使用EF Core訪問數據庫並從數據庫表中獲取數據。在查看用主數據加載相關數據的各類方法以前,你將瞭解EF Core查詢的基本格式。例如,第一章中加載與書關聯的做者。工具
在學習加載關聯數據以後,你將着手構建更加複雜的查詢,而這些是圖書售賣網站運行起來所必須的。這將涉及到排序,過濾,和分頁,以及將這些單獨的查詢命令組合在一塊兒以建立一個複合數據庫查詢。佈局
本章,你將開始構建一個圖書銷售網站,咱們稱之爲Book APP。這個應用示例提供了一個很是好的工具來查看查詢中的關係。本節介紹數據庫、各類類以及Book App 訪問數據庫所需的EF Core 部分。學習
note:你能夠在線訪問book app
http://efcoreinaction.com/網站
儘管咱們能夠把一本書相關的信息,它的做者,評論都建立在一張表中,可是在關係型數據庫中那樣作不會運行良好,尤爲是評論字段的長度是課變的。關係型數據庫範式會將重複數據拆分(好比,authors表)。this
咱們有幾種方式能夠把圖書的數據各個部分在數據庫中分類(存儲),可是對於本例,數據庫具備EF-Core關係中每種主要關係類型中的一種。這三種類型是:.net
一本書會有一個促銷價格。這是經過在PriceOffer*實體類增長一個可選字段實現的,這是一個一對一關心的例子(從技術上講,它是一對零或一關係,可是EF Core對它們的處理時同樣的)。請看圖2.13d
爲了計算這本你圖書的最終價格,你須要檢查PriceOffer表的一行數據,它們是經過外鍵關聯的。若是這行被查到有數據,NewPrice字段的數據將被查到的價格替代,PromotionalText的值將會在屏幕上顯示,好比:
$40 $30 Our summertime price special, for this week only!對象
你容許用戶對圖書予以評論。他們能夠給書評星級並能隨意評論。由於一本書能夠有零個或多個(不限制數量)評論,你須要建立一個表來存儲上這些數據。本示例中,這張表能夠命名爲Review。Books表相對於Review表是一對多的關係。以下圖2.2所示:
你須要在摘要顯示中,您須要計算評論的數量並計算出平均星級,以顯示摘要。例如,這裏有一個典型的屏幕顯示,你可能從這一對多的關係中產生,以下:
Votes 4.5 by 2 customers
多對多關係: BOOKS TO AUTHORS
圖書能夠被一名或者多名寫做,一個做者能夠些一本或多本圖書。所以,須要一張Books表來存儲書本數據,另外一張表Authors存儲做者數據。Books表和Authors表之間連接的表稱爲連接表。
此關係的典型屏幕顯示以下
by Dino Esposito, Andrea Saltarello
在EF Core中,你能夠定義一個實體類,而這個是實體類繼承自另外一個實體類。例如,你能夠定義PriceOffer繼承至BooK.那樣會得到和此前一對一關係同樣的結果。EFCore經過每一個層次結構一個表(TPH)的模式實現,這個在第七章會涉及到。
另外i一種關係類型是分層關係:一組數據項經過層次結構相互關聯。一個典型的實例是Employee類。它有一個指向員工經理的關係,而經理反過來又是員工(注:這種關係可能叫自關聯)。
EF Core使用與一對一和一對多相同的方法來提供層次關係。在第七章,我會更多談論這個關係,在那裏,我會解釋如何配置。
圖2.4 展現了Book App的數據庫,這個數據庫將用於本章和第三章的實例。它包含全部已描述的表,包括完整的books表中全部列的定義
NOTE:
這個數據庫關係圖使用了和第一章相同的佈局和術語。PK表示主鍵,FK表示外鍵。
爲了幫助你理解這個數據庫,圖2.5展現了輸出到屏幕的圖書列表,可是請將目光聚焦到一本書上。
我建立了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
參考