1.配置簡單,支持多資料庫
2.支持Linq
3.支持集合對象的批量添加、刪除、修改
4.靈活的批量刪除(通過Linq表達式)功能
5.靈活的批量更新(通過Linq表達式)功能
6.支持一對一映射(不需要配置映射關係自動映射)
7.支持一對多(不需要配置映射關係自動映射)
8.支持多對一(不需要配置映射關係自動映射)
9.遵從資料庫的設計理念,不支持多對多,可以把多對多轉化成兩個一對多
10. 不支持級聯更新、級聯刪除,開發人員完全手工維護外鍵引用完整性
11. 不支持LazyLoad機制,默認就不會載入,除非指定Include方可
12. 不支持Session快取機制
13. 不支持二級快取
14. OR映射也支持xml配置檔案
15. OR映射可以不需要任何Attribute配置
16. OR映射的方式:a. Fluent API 方式,b. Attribute 方式,c. 約定方式,d. 混合方式(可以混合a、b、c 三種方式,映射的優先權a>b>c),e. Xml方式
17. 字元串配置簡單,遵從.net 的配置規範,沒有另起灶爐,比如EF,或者NH
18. 只要有有資料庫關係理念、懂得Linq表達式就能馬上上手
19. ELinq 主要對字元串類型做了參數化,數值類型沒有做參數化處理,由於有些資料庫函式不支持數值類型的參數化參數。
設計理念
一: 約定勝於配置
- 連線字元串的配置完全遵循.Net 的連線字元串配置規範。
- 表名映射原則: 默認情況下表名和實體類名完全一致,如果不一致但是大部分都遵循一定的規律,比如表名都是複數,類名都是單數等,那么可以通過通過SetClassNameToTalbeName策略方法來進行,針對個別不一致情況可以通過TableAttribute標籤來制定,或者通過自定義ClassMap來進行,也可以通過XML方式進行統一配置
- 列名映射原則:默認情況下實體的屬性或欄位和表中列名完全一致(不區分大小寫),如果不一致那么可以通過ColumnAttribute標籤來制定,也可以通過自定義ClassMap來進行,也可以通過XML方式進行統一配置
- 單一主鍵映射原則:默認情況下實體的ID屬性或”實體名稱"+ID的屬性自動映射為表的主鍵,當欄位或屬性的類型是Int型或Long類型時,那么該欄位在資料庫中應是自動增一或基於序列的方式
- 多主鍵映射原則:如果表中有聯合主鍵那么需要在是實體類中把對應的欄位或屬性添加IdAttribute標籤即可
- 一對多映射原則:假設有兩個實體Customer 和 Order兩個實體,Customer 裡面包含一個Order的列表屬性,那么只需要在Order類裡面包含一個CustomerID 的屬性或欄位即可自動完成一對多映射,當然也可以通過AssociationAttribute標籤來指定映射的ThisKey 和ThatKey來手動建立關聯(建議自動建立)。
- 多對一映射原則:假設有兩個實體Customer 和 Order兩個實體,Order裡面包含一個Customer的屬性引用,那么只需要在Order類裡面包含一個CustomerID 的屬性或欄位即可自動完成一對多映射,當然也可以通過AssociationAttribute標籤來指定映射的ThisKey 和ThatKey來手動建立關聯(建議自動建立),其實一對多和多對一的映射完全一致都需要在多方的那裡添加一個屬性(一方的類名名稱+“ID”)。
- 多對多映射原則:不支持,需要轉換成兩個一對多映射,和資料庫完全保持一致.
二:基於關係的OR映射的原則
表和實體是一一對應的,不支持多對多,完全遵循資料庫的設計規範,降低開發人員的學習成本(因為資料庫不支持多對多,如果OR映射支持多對多那么開發人員將要學習多對多的映射規則,比如NHibernate,ManyToMany、Set、Bag、Reverse等配置規範以及在多對對數據保存的時候也需要很多學習成本)
三:無狀態原則
DbContext中沒有保存實體的狀態,沒有任何數據快取,所有的數據都是和資料庫實時的,只要調用DbSet的Insert、Update、Save方法將立即和資料庫進行對應的操作。
文檔