Dapper的扩展这个你知道嘛?
之前写的ORM对比文章中,我选Dapper作为底层ADO的基础访问框架后,我对此再次进行进一步的深入研究,发现里面还有延伸了一些好用的扩展方法和特性,那我便简单的跟大家说一下特性标签。
一、TableAttribute 特性
这个先对简单,就是对模型进行定义表名,如果你未标注表名特性,默认去模型类型名称,并且此特性只能标注在类上,不能标注在属性,方法等其它作用体上;
二、KeyAttribute [隐式]主键特性
为什么我把它定义隐式呢,关键在于在Insert时,如果你用它标记了一个属性,那这个属性的值无法对应插入到数据表里,比较适合自增类型主键和数据库默认有赋值的主键字段
代码模拟:
- [Table("Person")]
- public class Person
- {
- [Key]
- public Guid ID { get; set; }
- public string Name { get; set; }
public byte Age { get; set; }- }
//最终的脚本是:INSERT INTO [Person] (Name,Age) VALUES (@Name,@Age)
三、ExplicitKeyAttribute [显式]主键特性
我之前也比较纳闷怎么需要定义两种KEY特性,在尝试DEMO后,就发现这个是可以作用在Insert上进行主键值插入
代码模拟:
- [Table("Person")]
- public class Person
- {
- [ExplicitKey]
- public Guid ID { get; set; }
- public string Name { get; set; }
- public byte Age { get; set; }
- }
- //最终的脚本是:INSERT INTO [Person] (ID,Name,Age) VALUES (@ID,@Name,@Age)
四、WriteAttribute 可写特性
最简单的理解,如果在属性上这么标注:Write(false),表明不可写入,包括:Insert和Update,这个我就不贴代码了,很好理解
五、ComputedAttribute 已计算过特性
单词理解上我觉得就是表明这个属性值是自己计算,不参与任何Insert和Update,但可从数据表读取数据,所以如果在属性上标记这个将无法进行写入和更新值
以上的扩展特性在项目:Dapper.Contrib上,大家在使用的的时候注意引用,此项目也是写Dapper的开发者编写的,请配合扩展方法:Get<T>,GetAll<T>, Insert<T>,Update<T>,Delete<T>,DeleteAll<T>
以上如果有不对的地方,请多多指出!
Dapper的扩展这个你知道嘛?的更多相关文章
- 封装自己的dapper lambda扩展-设计篇
前言 昨天开源了业务业余时间自己封装的dapper lambda扩展,同时写了篇博文<编写自己的dapper lambda扩展-使用篇>简单的介绍了下其使用,今天将分享下它的设计思路 链式 ...
- 【转】.NET(C#):浅谈程序集清单资源和RESX资源 关于单元测试的思考--Asp.Net Core单元测试最佳实践 封装自己的dapper lambda扩展-设计篇 编写自己的dapper lambda扩展-使用篇 正确理解CAP定理 Quartz.NET的使用(附源码) 整理自己的.net工具库 GC的前世与今生 Visual Studio Package 插件开发之自动生
[转].NET(C#):浅谈程序集清单资源和RESX资源 目录 程序集清单资源 RESX资源文件 使用ResourceReader和ResourceSet解析二进制资源文件 使用ResourceM ...
- 基于轻量级ORM框架Dapper的扩展说明
这里简单的介绍一下本人基于Dapper作的一些简单的扩展,供大家参考. 为何要使用这款框架,相信大家看到下面排名就清楚了 其实在各大网站上,我们大概都会看到这样的一个对比效果图,在超过500次poco ...
- 编写自己的dapper lambda扩展-使用篇
前言 这是针对dapper的一个扩展,支持lambda表达式的写法,链式风格让开发者使用起来更加优雅.直观.现在暂时只有MsSql的扩展,也没有实现事务的写法,将会在后续的版本补充. 这是个人业余的开 ...
- .NETCore Sqlserver下对Dapper的扩展支持
这里我们自定义一个IServiceCollection的扩展,例如下面我的扩展 services.AddDapperContext(dapperoptions => { dapperoption ...
- ASP.NET Core 实战:基于 Dapper 扩展你的数据访问方法
一.前言 在非静态页面的项目开发中,必定会涉及到对于数据库的访问,最开始呢,我们使用 Ado.Net,通过编写 SQL 帮助类帮我们实现对于数据库的快速访问,后来,ORM(Object Relatio ...
- 开源Dapper的Lambda扩展-Sikiro.Dapper.Extension V2.0
前言 去年我在业余时间,自己整了一套dapper的lambda表达式的封装,原本是作为了一个个人的娱乐项目,当时也只支持了Sql Server数据库.随之开源后,有不少朋友也对此做了试用,也对我这个项 ...
- NET Core 实战 Dapper 扩展数据访问
NET Core 实战:基于 Dapper 扩展你的数据访问方法 一.前言 在非静态页面的项目开发中,必定会涉及到对于数据库的访问,最开始呢,我们使用 Ado.Net,通过编写 SQL 帮助类帮我们实 ...
- .NET MVC5+ Dapper+扩展+AutoFac自动注入实现
1.首先创建一个MVC项目 定义Model 层 view 层 index.cshtml 控制器层Controllers等文件 2.在线安装或者引用dapper 以及扩展相关包 同时Autofac ...
随机推荐
- 直播流怎么存储在Ceph对象存储上? Linux内存文件系统tmpfs(/dev/shm) 的应用
一./dev/shm理论 默认的Linux发行版中的内核配置都会开启tmpfs,映射到了/dev/下的shm目录.可以通过df 命令查看结果./dev/shm/是linux下一个非常有用的目录,因为这 ...
- Ubuntu16.04 FTP Server 完整篇
sudo apt-get update #更新系统 sudo apt-get install vsftpd #安装vsftpd sudo systemctl status vsftpd #判断vs ...
- zepto.js 处理Touch事件
处 理Touch事件能让你了解到用户的每一根手指的位置,在touch事件触发的时候产生,可以通过touch event handler的event对象取到,如果基于zepto.js开发,一般是通过ev ...
- 【bzoj3998】 TJOI2015—弦论
http://www.lydsy.com/JudgeOnline/problem.php?id=3998 (题目链接) 题意 给出一个字符串,求它的字典序第K小的子串是什么,分情况讨论不在同一位置的相 ...
- iOS 引导页
1. 目标需求 引导页无限轮播,且轮播到最后一张时没有跳转到头一个的感觉 pageControl的显示为可选项 是否无限轮播为可选项 手动切换图片,并再次启动自动轮转 实现点击事件 2. 实现思路 初 ...
- 大数据时代的杀手锏----Tachyon
一.Tachyon系统的简介 Tachyon是一个分布式内存文件系统,可以在集群里以访问内存的速度来访问存在tachyon里的文件.把 Tachyon是架构在最底层的分布式文件存储和上层的各种计算框架 ...
- Drawerlayou与ScrollView的介绍
Drawerlayout侧滑 Drawerlayout是Support Library包中实现了侧滑菜单效果的控件. 滚动条(ScrollView) ScrollView和HorizontalScro ...
- 在Flex中使用文件系统
一.File和FileStream对象File和FileStream是AIR文件系统中,重要的组成部分,File对象有许多属性,用于唯一区别它与文件系统上的其他文件对象,属性包括:url/native ...
- 关于MATSIM中,如何关闭自动加载dtd的问题
有用过MATSIM做交通仿真的朋友应该都知道,在创建Scenario时,会默认加载matsim官网的netword的dtd文件,然后因为网络的问题,加载往往会报错,从而造成系统异常退出,如图所示: 根 ...
- SSM框架整合(注解)-Spring+SpringMVC+MyBatis+MySql
准备工作: 下载整合所需的jar包 点击此处下载 使用MyBatis Generator生成dao接口.映射文件和实体类 如何生成 搭建过程: 先来看一下项目的 目录结构 1.配置dispatcher ...