[LINQ2Dapper]最完整Dapper To Linq框架(三)---实体类关系映射
此特性需要安装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]可以标识主键
[Identity]
public int id { get; set; }
Identity内还可以使用IsIncrease指定字符串是否是自增,来判断插入语句是否需要给该字段赋值
[Identity(IsIncrease =true)] //默认为true,是自增
public int Id { get; set; }
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)
例如
EntityCache.Register(typeof("实体类"));
2.Register(Type []type)
可以通过反射获取实体类类型数组
3.Register(string assemblyString)
assemblyString:通过给定程序集的长格式名称加载程序集。
例如
EntityCache.Register("实体类层的类库名称");
完整Demo可以去Github上下载:
https://github.com/a935368322/Kogel.Dapper.Test
如有问题也可以加QQ群讨论:
技术群 710217654
框架开源,可以加群下载源码
[LINQ2Dapper]最完整Dapper To Linq框架(三)---实体类关系映射的更多相关文章
- [LINQ2Dapper]最完整Dapper To Linq框架(七)---仓储模式
目录 [LINQ2Dapper]最完整Dapper To Linq框架(一)---基础查询 [LINQ2Dapper]最完整Dapper To Linq框架(二)---动态化查询 [LINQ2Dapp ...
- [LINQ2Dapper]最完整Dapper To Linq框架(一)---基础查询
此例子是使用LINQ2Dapper封装,效率优于EntityFramwork,并且支持.NetFramework和.NetCore框架,只依赖于Dapper 支持.net framework4.5.1 ...
- [LINQ2Dapper]最完整Dapper To Linq框架(二)---动态化查询
目录 [LINQ2Dapper]最完整Dapper To Linq框架(一)---基础查询 [LINQ2Dapper]最完整Dapper To Linq框架(二)---动态化查询 [LINQ2Dapp ...
- [LINQ2Dapper]最完整Dapper To Linq框架(四)---Linq和SQL并行使用
目录 [LINQ2Dapper]最完整Dapper To Linq框架(一)---基础查询 [LINQ2Dapper]最完整Dapper To Linq框架(二)---动态化查询 [LINQ2Dapp ...
- [LINQ2Dapper]最完整Dapper To Linq框架(五)---查看Linq实际执行的SQL
此例子是使用LINQ2Dapper封装,效率优于EntityFramwork,并且支持.NetFramework和.NetCore框架,只依赖于Dapper支持.net framework4.6.1及 ...
- [LINQ2Dapper]最完整Dapper To Linq框架(六)---多表联合与匿名类型返回
目录 [LINQ2Dapper]最完整Dapper To Linq框架(一)---基础查询 [LINQ2Dapper]最完整Dapper To Linq框架(二)---动态化查询 [LINQ2Dapp ...
- [LINQ2Dapper]最完整Dapper To Linq框架(八)---导航属性
目录 [LINQ2Dapper]最完整Dapper To Linq框架(一)---基础查询 [LINQ2Dapper]最完整Dapper To Linq框架(二)---动态化查询 [LINQ2Dapp ...
- HibernateCRUD基础框架(1)-实体类
HibernateCRUD基础框架包括3篇文章,主要讲述整个CRUD基础框架的思路. 第1篇:讲述最基本的实体类,这些实体类是对SQL语言中的一些概念的封装. 第2篇:在这些实体类的基础上,开发一个& ...
- Hibernate学习笔记三:对象关系映射(一对一,一对多,多对一,多对多)
如需转载,请说明出处:http://www.cnblogs.com/gudu1/p/6895610.html Hibernate通过关系映射来表示数据库中表与表之间的关系,关系映射可以通过两种方式:配 ...
随机推荐
- 原生js使用getComputedStyle方法获取CSS内部属性值
在对网页进行调试的过程中,经常会用到js来获取元素的CSS样式, 1.下面的方法只能JS只能获取写在html标签中的写在style属性中的值(style=”…”),而无法获取定义在<style ...
- UVA - 1160 X-Plosives
A secret service developed a new kind of explosive that attain its volatile property only when a spe ...
- UVA - 11400 Lighting System Design
题文: You are given the task to design a lighting system for a huge conference hall. After doing a lot ...
- 基于Prometheus和Grafana的监控平台 - 环境搭建
相关概念 微服务中的监控分根据作用领域分为三大类,Logging,Tracing,Metrics. Logging - 用于记录离散的事件.例如,应用程序的调试信息或错误信息.它是我们诊断问题的依据. ...
- 算法学习之剑指offer(二)
题目1 题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. import java.util.Stack; public class Solution { ...
- 【C语言笔记】#define与typedef的区别
1.#define define是预处理指令,在编译时不进行任何检查,只进行简单的替换 宏定义的一般形式为: #define 宏名 字符串 这里所说的字符串是一般意义上的字符序列,不要和C语言中的字符 ...
- CSRF漏洞实战靶场笔记
记录下自己写的CSRF漏洞靶场的write up,包括了大部分的CSRF实战场景,做个笔记. 0x01 无防护GET类型csrf(伪造添加成员请求) 这一关没有任何csrf访问措施 首先我们登录tes ...
- snkrs web端分析,canvas中的fingerpint
snkrs web端分析,canvas中的fingerpint 代码如下 (()=>{ const canvas = document.createElement("canvas&qu ...
- 使用Spring 或Spring Boot实现读写分离( MySQL实现主从复制)
http://blog.csdn.net/jack85986370/article/details/51559232 http://blog.csdn.net/neosmith/article/det ...
- 关于git提交
16年申请注册的git账号,除了需要找一些有用的demo时会逛一下,其实一直没拿起来真实用过. 好了,说一下今天下午呕心沥血弄出来的东西,其实就是简单的用git小黑窗口推文件夹上去,本人较笨,会按照我 ...