EF和dapper


EF:重量級ORM的代表

優點:

1、不關心sql怎么寫,

2、開發速度快,和linq結合,有效提高開發效率

3、code first,代碼優先,不用關心數據庫結構,代碼先行。

4、跨數據庫,只需要把連接字符串改一下就可成功切換數據庫

5、與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.開發人員除了維護好數據庫中的表,還得維護好代碼中表的映射對象。

 

EF和Dapper結合使用:

1、Dapper是半自動的ORM,需要開發人員自己寫實體,但是和EF結合后實體部分可以由EF來完成。

2、Dapper開發成本高,叫若的linq支持,但是EF和linq結合的非常好,且不用寫sql,有效提高開發效率。

3、EF對於多表聯查,一些復雜的查詢實現比較復雜和困難,而且有可能要借助其他方案來實現(比如聯合查詢從表屬性在主表實體里設為[NotMapped],查詢出來的內容從表屬性值為null,可以再寫個包含全部屬性的實體來解決這個問題,但是過程太過麻煩),

  因此這個時候Dapper該上場了! (  dbcontext.Database.Connection.Query<T> ) 完美解決這個問題。

 4、傳參;利用dapper 的DynamicParameters動態參數查詢,結合dapper的dbcontext.Database.Connection.Query<T> (不用string.format()).

    dp.Add(key, value) ;   sql里用@key 。傳參


免責聲明!

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



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