此特性需要安裝Kogel.Dapper.Mssql或者Oracle 3.06及以上版本,實體類層需要安裝Kogel.Dapper.Extension 3.06及以上版本
目錄
- [LINQ2Dapper]最完整Dapper To Linq框架(一)---基礎查詢
- [LINQ2Dapper]最完整Dapper To Linq框架(二)---動態化查詢
- [LINQ2Dapper]最完整Dapper To Linq框架(三)---實體類關系映射
- [LINQ2Dapper]最完整Dapper To Linq框架(四)---Linq和SQL並行使用
- [LINQ2Dapper]最完整Dapper To Linq框架(五)---查看Linq實際執行的SQL
- [LINQ2Dapper]最完整Dapper To Linq框架(六)---多表聯合與匿名類型返回
- [LINQ2Dapper]最完整Dapper To Linq框架(七)---倉儲模式
- [LINQ2Dapper]最完整Dapper To Linq框架(八)---導航屬性
1.實體類和數據庫關系映射特性
1.[Identity]可以標識主鍵
2.實體類名稱和數據庫表名不一致,或者屬性名稱和字段不一致
可以使用 [Display(Rename = "名稱")] 特性標識
[Display(Rename = "users")] public class testusers { [Display(Rename ="Content")] public string testName222 { get; set; } }
Rename填寫數據庫對應的表名或者字段名稱,用來映射表關系
執行效果
查詢時需要使用 FieldMatch<實體類>() 函數匹配映射實體類(3.1.8.5版本后不需要)
3.Display使用AsName區別同表之間的關系
假設同一條表達式語句中查詢了兩次A表,這時使用where條件 Where<A>可能無法指定到底是判斷哪張A表,
這時就需要使用AsName
[Display(AsName ="commm1")] public class Comment:IBaseEntity<int> { [Identity(IsIncrease =true)] public int Id { get; set; } } //繼承同表,設置表名稱 [Display(AsName = "commm2",Rename = "Comment")] public class Comment1 : Comment { }
現在表達式如果需要判斷第二個A表的條件就可以直接使用
表達式.Where<Comment1>(條件)來判斷了,匿名類型返回字段和連表查詢時都可以用到來避免沖突。
4.非表映射關系
可以使用 [Display(IsField = false)] 特性標識
框架隱射時就會排除該字段
2.使用原生Dapper是否可以用Kogel.Dapper的特性標識
目前支持原生Dapper的特性只有[Display(Rename = "名稱")]
不過用法有點差別,需要先執行FieldMatch<T>()方法
然后實體類
這個FieldMatch函數是注冊全局的,所以只需要執行一次
然后查看效果,字段“test111”的值變成了Rename指向“Content”的值
3.實體類預加載
在系統啟動時可以使用 EntityCache.Register 注冊實體類到內存中,后續表達式不會在重復反射實體類,減少反射時間,提升性能
此方法有三個重載
1.Register(Type type)
例如
2.Register(Type []type)
可以通過反射獲取實體類類型數組
3.Register(string assemblyString)
assemblyString:通過給定程序集的長格式名稱加載程序集。
例如
完整Demo可以去Github上下載:
https://github.com/a935368322/Kogel.Dapper.Test
如有問題也可以加QQ群討論:
技術群 710217654
框架開源,可以加群下載源碼