[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通过关系映射来表示数据库中表与表之间的关系,关系映射可以通过两种方式:配 ...
随机推荐
- 10月27日Java整理
实验一:凯撒密码 import java.util.Scanner; //zhanxinwu,October,25,2016 public class Addmi { public static vo ...
- oracle查询当前用户下所有的表,包括所有的字段
oracle查询当前用户下所有的表,包括所有的字段 背景: 前两天接到一个需求,做一个展示所有表名,表备注,表数据,表字段数,点击查看按钮查看字段名和注释,支持导出. 在Oracle中,可用使用视 ...
- Mac上Charles抓包iOS的https请求
介绍一款抓包工具,一般我在windows下使用Fiddler抓包,Fiddler使用教程这里就不讲了,重点介绍使用mac时的抓包工具----Charles. 进入官网 :Charles官网地址官网下载 ...
- django rest framework1
内容回顾: 1.开发模式 - 普通开发方式(前后端放在一起写) - 前后端分离 2.后端开发 为前端提供URL(API/接口的开发) 注:永远返回HttpResponse 3.Django FBV.C ...
- 模块的 __name__
模块的 __name__ 每个模块都有一个名称,而模块中的语句可以找到它们所处的模块的名称.这对于确定模块是独立运行的还是被导入进来运行的这一特定目的来说大为有用.正如先前所提到的,当模块第一次被导入 ...
- Vue成员获取
0828自我总结 Vue成员获取 一.vue中data的获取 1.获取data里面的某个变量 $data.msg也可以简写成msg 2.获取data全部内容 $data 二.获取vue中vue挂钩的对 ...
- docker配置阿里云镜像
今天docker pull镜像的时候太慢了 所以这里配置下阿里云镜像 打开阿里云控制台,没有的可以用淘宝账号或者支付宝账号直接登录 打开容器镜像服务,镜像加速器,复制加速器地址 修改配置文件 $: ...
- javascript 对象和字符串互转
Object => String : console.log(JSON.stringify(e)); String => Object : JSON.parse(str)
- python方法是什么?
python方法是什么? 方法用来描述对象所具有的行为. 在类中定义的方法可以粗略分为四大类:公有方法.私有方法.静态方法.类方法. 公有方法.私有方法一般所指属于对象的实例方法, 私有方法的名字以两 ...
- 利用Veeam保护SAP HANA数据库
利用Veeam保护SAP HANA数据库 前言 针对越来越多的SAP HANA备份需求,我们Team翻译.整理.借鉴了Veeam 的SAP HANA 大神 Clemens Zerbe 和 Ali Sa ...