什麼是ORM呢?
EF和Dapper都是ORM架構。
ORM的全稱是Object Relational Mapping,即對象關系映射.EF和Dapper他們的共同作用,都是将關系型資料庫中的表的資料,映射成為對象.這樣,開發人員就可以把對資料庫的操作轉化為對這些對象的操作.
是以他們共同目的就是:為了友善開發人員,以面向對象的思想來實作對資料庫的操作.
那他們又有什麼優缺點呢?我們實際的軟體開發過程中,應該如何選型呢?
EF:重量級ORM的代表
優點:
- 面向對象的方式操作資料庫.
- 能夠擺脫SQL,完全不用關心SQL怎麼寫,可移植性強.
- EF支援和适配了所有流行的關系型資料庫,并且是面向接口的設計,并對事物,緩存(一級緩存)有良好的封裝及配置.
- 支援code first.開發人員,可以完成不用關心資料庫,代碼先行,極大的節約開發成本.
- 開發效率非常高,結合LINQ,開發速度極快.
- 可以跨資料庫,隻需要在配置檔案中修改連接配接字元串就能輕松支援.
- 與VS結果的比較好.
缺點:
- 比較複雜,學習曲線打;
- 不适合統計查詢系統(或用于統計查詢,效率不是很高);
- 對于多表聯查,一些複雜的查詢實作比較複雜和困難,而且有可能要借助其他方案來實作.
- 自動生成的SQL查詢效率略低(效率低,是資料量達到一定量級,比較才明顯).
- 對于大量資料,高負載場景需要慎重使用.
- 實作良好的二級緩存很困難,并且隻能定制.
- EF的Context上下文不是線程安全的,開發人員切記不應該在整個Service上使用一個Context上下文.
- EF的性能表現比較一般.性能不如ADO,無法控制SQL語句的生成,頻繁的插入操作(insert)不适用,EF不支援大資料Bulk插入.
(關于EF缺點第8點不支援批量處理,你沒做深入研究,EF的第三方插件Z.EntityFramework.Extensions,支援EF可以做批處理操作,性能效率要比SaveChange高不少,同樣Dapper也有第三方插件支援批處理,Address:https://entityframework-extensions.net/bulk-insert,https://dapper-tutorial.net/dapper-contrib 這兩個網站需要科學上網)
Dapper:輕量級ORM的代表
優點:
- 開源,輕巧,單檔案,代碼就一個SqlMapper.cs檔案,編譯後就40K的一個小dll.上手容易.
- 支援主流的關系型資料庫,如SQLserver,MySql,Oracle等.
- 執行的效率高,Dapper的速度和原生的IDataReader接近,取清單的資料甚至超過了DataTable.
- Dapper的原理通過Emit反射IDataReader的序列隊列,來快速得到和産生對象.
缺點:
- 半自動的ORM,需要開發人員,自己寫實體類.
- 開發的時間成本高,較弱的LINQ支援.
- 維護成本高,不支援code First,開發人員,除了維護好資料庫中的表,還得維護好代碼中表的映射對象.