EF:重量級ORM的代表
優點:
1.面向對象的方式操作數據庫。
2.能夠擺脫sql,完全不用關心sql怎么寫,可移植性強。
3.EF支持和適配了所有流行的關系型數據庫,並且是面向接口的設計,並對事物,緩存(一級緩存)有良好的封裝及配置。
4.支持code first。開發人員可以完全不用關心數據庫,代碼先行,極大的節約開發成本。
5.開發效率非常高,結合linq,開發速度極快。
6.可以跨數據庫,只需要在配置文件中修改連接字符串就能輕松支持。
7.與vs結果的比較好。
缺點:
1.比較復雜,學習曲線大。
2.不適合統計查詢系統,效率不是很高。
3.對於多表聯查,一些復雜的查詢實現比較復雜和困難,而且有可能要借助其他方案來實現。
4.自動生成的sql查詢效率略低(效率低,數據量達到一定量級比較明顯)
5.對於大量數據,高負載場景需要慎重使用。
6.實現良好的耳機緩存很困難,並且只能定制。
7.EF的Context上下文不是線程安全的,開發人員切記不應該在整個Service上使用一個Context上下文。
8.EF的性能表現比較一般。性能不如ADO,無法控制SQL語句的生成,頻繁的插入操作不適用,EF不支持大數據Bulk插入。
Dapper:輕量級ORM的代表
優點:
1.開源,輕巧,單文件,上手容易
2.支持主流的關系型數據庫,如SQLserver,MySql,Oracle等。
3.執行的效率高,Dapper的速度和原生的IDateReader接近,取列表的數據甚至超過了DateTable。Dapper的原理通過Emit反射IDataReader的序列隊列來凱蘇得到和產生對象。
缺點:
1.半自動的ORM,需要開發人員自己寫實體
2.開發的世界成本高,較弱的LINQ支持
3.維護成本高,不支持code FIrst.開發人員除了維護好數據庫中的表,還得維護好代碼中表的映射對象。
————————————————
版權聲明:本文為CSDN博主「屈先生」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qzh459927216/java/article/details/103233185
下面是我自己的一些經驗總結(EF效率問題)
1.EF在查詢條件比較的多的時候,轉換sql比較耗時,轉換為的sql語句比較復雜,查詢條件嵌套比較多。
2.在查詢的時候,碰到聚合函數,日期等條件的時候,會導致索引失效。
3.查詢時,比如查詢分頁等情況,有時候會調用多次數據庫。
4.在直接用Skip和Take時,會導致在內存中分頁,先查詢全部,在取出分頁數據。