本文是對《Entity framework in action》部分章節的翻譯,某些場景也會附上筆者實踐的Demo。儘管很認真的斟酌,可是水平有限,還請各位批評和斧正。html
Entity Framework Core, 或者 EF Core,是一個方便軟件工程師訪問數據庫的庫。有不少方法來構建這樣的一個庫,可是EF Core 被設計爲一個對象和關係的映射器(也就是咱們常說的ORM框架)。ORM是把兩個世界的東西映射在一塊兒,一個是關係型數據庫自身API,另外一個是面向對象世界的類和軟件代碼。EF Core的優點在於,讓軟件工程師可以經過代碼快速訪問數據庫。git
EF Core,微軟發佈於2016年,它具備跨平臺性:它能夠運行在Windows,Linux,mac等操做系統上。它使用EF Core來命名的主要緣由,確實是由於他是.NET Core 原創的一部分(可是.NET Core 也能夠用於現存的.NET Framework)。程序員
EF Core, ASP.NET Core (服務端APP), 和 .NET Core都是開源的,而且都有提供給開發團隊交流的活躍的issues頁面。github
EF Core不是 Entity Framework的第一個版本.現存的你們最爲熟知的Entity Framework版本是EF 6.X. EF Core一開始就汲取了Entity Framework 4到6.x多年積累的經驗和反饋意見。她保持了和EF 6.x同樣接口,可是在底層作了重大改造。好比,它支持非關係性數據庫,這在EF 6.x中並無設計。做爲EF5和6.x的用戶,我能看到EF Core相對於此前的版本有了提升,同時也看到我喜歡的那些在EF 6.x中的特性在EF Core中尚未(儘管那些特性已經在列入了開發日程)。sql
本書的目標讀者能夠是那些從未使用過Entity Framework的開發人員,也能夠是那些EF 6.x老手,還能夠是那些想了解EF Core 能作什麼的人。我假定大家都熟悉.net 和 C#開發,至少對關係型數據庫有所瞭解。但我不假定大家會使用SQL語言(一種用於大多數關係型數據庫的語言),由於EF Core可以幫你作太多的事情(不用sql).可是,我會想你展現EF Core生成的SQL,由於它能幫助您理解發生了什麼。使用EF的某些高級特性須要有SQL知識,而本書會提供大量的插圖來幫助您學習。數據庫
本章將經過也小例子來價紹EF Core的使用。這個例子會調用EF Core.你也將會你看到 EF Core是底層是如何翻譯軟件命令並訪問數據庫。對EF Core底層原理的概覽有助於閱讀本書的其他部分。服務器
本書被分爲三個部分.除了本章,第一部分還有其它四章。框架
學完第一部分,你將可以使用關係數據庫構建一個.net 應用。可是數據庫的組織方式留給EF Core來處理。舉個例子,EF Core 默認會設置數據庫字段的類型和大小,這會浪費一點點空間。性能
第二部分,會涉及到如何和爲何要修改默認配置,並深刻地查看一些EF Core 命令。學完第二部分,您將可以根據您的想法,用EF Core精準的建立數據庫.或者連接那些具備特定結構和設計的數據庫。而且,經過使用EF Core的一些高級特性,您可以改變你.net 應用程序中數據庫數據的暴露方式——好比,控制軟件更加謹慎地訪問數據或者構建代碼來自動跟蹤數據庫的變化。單元測試
第三部分,全是關於提升您的技能,以及使您可以更好地開發和調試EF Core應用程序。我展現了一個真實的EF Core應用,從一系列熟知的模式和實踐入手,而這是您是能夠拿來即用的。閱讀這些章節,你可單元測試,對EF Core進行擴展,而最重要的是,能夠發現和修復EF Core 的性能問題。
若是你是Entity Framework的新手,能夠跳過本節。
若是你是熟悉EF 6.x的讀者,EF Core的大部分你會熟悉。爲了引導您快速地閱讀完本書,我增長了EF6的說明。
EF 6
在本書中,請留意這樣的說明。他們指出了EF Core和EF 6.x的不一樣之處。同時,必定要看每章末尾的總結。他們會指出EF Core和EF 6.x的重大變化。
我將以本身學習EF Core經歷給你一些建議。我太熟悉EF 6.x,在我剛開始學習EF Core的時候,卻變成了一個問題。
我使用EF 6.x的方法處理問題,但不知道EF Core 有新的方法解決這些問題。在大多數狀況中,這些方法是相似的,可是一些方面,卻不是。
對於使用過EF 6.x的讀者,個人建議是請把EF Core當成一個新的庫,就當是某些人模仿EF 6.x寫的。可是,必須明白它與EF 6.x不一樣。 那樣,你會注意到EF Core中c處理問題的新的和不一樣的方法。
.NETCore用於關係型數據庫和.net世界中類和代碼的映射,俗稱ORM框架。表1.1展現了他們之間的映射關係。
造一個好的ORM框架很是困難。儘管EF 6.x和EF Core看起來很好用,某些時候的EF Core的「魔法」讓你驚歎。在咱們深刻學習EF Core工做原理以前,請讓我提出兩個問題。
第一個是對象關係的不匹配。數據庫服務器和麪向對象的軟件使用不一樣的規則:數據庫使用主鍵來定義一條記錄的惟一性,然而,.net類的實例默認是以它們的引用來區分。EF Core幫助你處理了大部分,可是.net 類會被這些key和value"污染"。大多數狀況下,EF Core會運行良好,可是爲了適應數據庫,對於純軟件的項目解決方案,有時候咱們處理的有一點點不一樣。你將在第二章看的例子就是多對多關係:在C#中處理很容易,可是在數據庫中有點繁瑣。
第二個問題是ORM框架——特別像EF Core這樣盡善盡美的框架——把數據庫隱藏的很好以致於有時候你會忘記數據庫的底層是如何運做的。這個問題回致使你的代碼在測試APP上運行良好,可是在數據庫很複雜且同時有大量用戶時的真實環境中表現糟糕。
這就是我爲何會花時間在本章,展現EF Core內部是如何工做的,以及如何生成SQL的。你越瞭解EF Core的工做原理,你就越可以寫出好的EF Core代碼。更重要的是,當它不工做的時候你知道作什麼。
NOTE:
貫穿於這本書,我本着"先跑起來,可是在我須要的時候可以變得更快"的思路來使用EF Core. EF Core 讓我開發快速,可是我也意識到,由於EF Core或者我沒有很好的使用EF Core致使在一些特定的業務需求,數據庫訪問的性能不夠好。第5章會介紹如何隔離你EF Core,這樣你就能以最小的反作用體調整它。第13章將介紹如何發現和優化那些不夠快速的EF Core代碼。
參考
原文出處:https://www.cnblogs.com/lucky_hu/p/10325087.html