Dapper
前一段做一个技术分享关于dapper的,现在再总结一下,也好长时间没有更新博客了……,用到的东西 Dapper、AutoFac 、AutoMapper、FluentValidation;
下面说一下Dapper的优点:
Dapper是一个轻型的开源ORM类,代码就一个SqlMapper.cs文件,编译后就40多K的一个很小的Dll.
Dapper支持Mysql,SqlLite,Mssql2000,Mssql2005,Oracle等一系列的数据库,当然如果你知道原理也可以让它支持Mongo db
Dapper的r支持多表并联的对象。支持一对多 多对多的关系。并且没侵入性,想用就用,不想用就不用。无XML无属性。代码以前怎么写现在还怎么写。
Dapper原理通过Emit反射IDataReader的序列队列,来快速的得到和产生对象。性能提升了很多;(比采用常规的反射)
Dapper支持net2.0,3.0,3.5,4.0。不过就是要配置下。如果不知道如何配置查看我博客里的在2.0下使用3.5就可以了。
语法十分简单。并且无须迁就数据库的设计。
官网上给的AutoMapper解释,我翻译了一下:
AutoMapper is a simple little library built to solve a deceptively complex problem - getting rid of code that mapped one object to another.
AutoMapper 是代码的一个简单的小库建立解决看似复杂的问题-摆脱映射到另一个对象。
官网上给的Autofac 解释,我又翻译了一下:
Autofac is an addictive IoC container for Microsoft .NET 4.5, Silverlight 5, Windows Store apps, and Windows Phone 8 apps. It manages the dependencies between classes so that applications stay easy to change as they grow in size and complexity. This is achieved by treating regular .NET classes as components.
Autofac 是入迷的 IoC 容器为 Microsoft.NET 4.5、 Silverlight 5、 Windows 应用商店应用程序,Windows Phone 8 应用程序。它管理类之间的依赖关系,以便应用程序保持容易改变,因为他们都生长在规模和复杂性。这被通过定期的.NET 类当作组件。
FluentValidation是与ASP.NET DataAnnotataion Attribute验证实体不同的数据验证组件,提供了将实体与验证分离开来的验证方式,同时FluentValidation还提供了表达式链式语法。
为什么用FV不用属性注解的方式,只是想把Model和验证分开,做到解耦。
依赖注入的方法有属性注入、构造函数注入、接口注入,具体依赖注入是什么,最后我会把技术分享的PPT加到附件里面,大家可以详细的看一下;
在Global里面注册AutoFac
public static void CoreAutoFacInit()
{
#region Autofac 注入依赖
var builder = new ContainerBuilder();
SetupResolveRules(builder);
builder.RegisterControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired(); //注册Filter过滤器
//builder.RegisterFilterProvider(); var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); #endregion // Set up the FluentValidation provider factory and add it as a Model validator
//var factory = new FluentValidatorFactory();
//ModelValidatorProviders.Providers.Add(new FluentValidationModelValidatorProvider(factory));
FluentValidationModelValidatorProvider.Configure(provider =>
{
provider.ValidatorFactory = new FluentValidatorFactory();
provider.AddImplicitRequiredValidator = false; provider.Add(typeof(UniqueEmailValidator), (metadata, context, description, validator) => new UniqueEmailPropertyValidator(metadata, context, description, validator));
});
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
ValidatorOptions.CascadeMode = CascadeMode.StopOnFirstFailure;
} /// <summary>
///
/// </summary>
/// <param name="builder"></param>
private static void SetupResolveRules(ContainerBuilder builder)
{
var assemblyRepository = Assembly.Load("GkmDapper.Repository");
var assemblyBLL = Assembly.Load("GkmDapper.BLL");
builder.RegisterAssemblyTypes(assemblyRepository).Where(type => type.Name.EndsWith("Repository") && type.Namespace.Equals("GkmDapper.Repository.SqlServerRepository"))
.AsImplementedInterfaces().SingleInstance();
builder.RegisterAssemblyTypes(assemblyBLL).Where(type => type.Name.EndsWith("BLL") && type.Namespace.Equals("GkmDapper.BLL.SqlServerBLL"))
.AsImplementedInterfaces().SingleInstance(); //将自定义FluentValidate加入IOC容器(程序集扫描)
AssemblyScanner.FindValidatorsInAssemblyContaining<CustomerValidator>().ForEach(x => builder.RegisterType(x.ValidatorType)
.As(x.InterfaceType).SingleInstance());
}
同样AutoMapper也需要注册
public static void RegisterMaps()
{
AutoMapper.Mapper.Initialize(config =>
{
config.CreateMap<CustomerViewModel, Customer>();
});
}
这是一篇未写完的博客,还是发表了吧。如果谁对Dapper+automapper+FluentValidation这套架构感兴趣的话,可以联系我,技术转型,不再更新关于.NET的东西。
Dapper的更多相关文章
- Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程+事物案例演示
Dapper的牛逼就不扯蛋了,答应群友做个入门Demo的,现有园友需要,那么公开分享一下: 完整Demo:http://pan.baidu.com/s/1i3TcEzj 注 意 事 项:http:// ...
- Dapper扩展之~~~Dapper.Contrib
平台之大势何人能挡? 带着你的Net飞奔吧!http://www.cnblogs.com/dunitian/p/4822808.html#skill 上一篇文章:Dapper逆天入门~强类型,动态类型 ...
- 由Dapper QueryMultiple 返回数据的问题得出==》Dapper QueryMultiple并不会帮我们识别多个返回值的顺序
异常汇总:http://www.cnblogs.com/dunitian/p/4523006.html#dapper 今天帮群友整理Dapper基础教程的时候手脚快了点,然后遇到了一个小问题,Dapp ...
- Dapper.Contrib:GetAsync<T> only supports an entity with a [Key] or an [ExplicitKey] property
异常处理:http://www.cnblogs.com/dunitian/p/4523006.html#dapper 原来Model是这样滴 修改后是这样滴 注意点:Model里面的Table和Key ...
- Dapper where Id in的解决方案
简单记一下,一会出去有点事情~ 我们一般写sql都是==>update NoteInfo set NDataStatus=@NDataStatus where NId in (@NIds) Da ...
- ASP.NET Core 1.0 使用 Dapper 操作 MySql(包含事务)
操作 MySql 数据库使用MySql.Data程序包(MySql 开发,其他第三方可能会有些问题). project.json 代码: { "version": "1. ...
- Asp.Net Core + Dapper + Repository 模式 + TDD 学习笔记
0x00 前言 之前一直使用的是 EF ,做了一个简单的小项目后发现 EF 的表现并不是很好,就比如联表查询,因为现在的 EF Core 也没有啥好用的分析工具,所以也不知道该怎么写 Linq 生成出 ...
- 搭建一套自己实用的.net架构(3)续 【ORM Dapper+DapperExtensions+Lambda】
前言 继之前发的帖子[ORM-Dapper+DapperExtensions],对Dapper的扩展代码也进行了改进,同时加入Dapper 对Lambda表达式的支持. 由于之前缺乏对Lambda的知 ...
- mono for android中使用dapper或petapoco对sqlite进行数据操作
在mono for android中使用dapper或petapoco,很简单,新建android 类库项目,直接把原来的文件复制过来,对Connection连接报错部分进行注释和修改就可以运行了.( ...
- Dapper:The member of type SeoTKD cannot be used as a parameter Value
异常汇总:http://www.cnblogs.com/dunitian/p/4523006.html#dapper 上次说了一下Dapper的扩展Dapper.Contrib http://www. ...
随机推荐
- IIS监控指标
IIS Global Active Flushed Entries Active Flushed Entries 是缓存文件句柄,当前传输全部完成后将关闭此句柄.IIS Global 对象. Web ...
- jquery cookie的用法
http://www.cnblogs.com/qiantuwuliang/archive/2009/07/19/1526663.html jQuery cookie是个很好的cookie插件,大概的使 ...
- Spark 自定义累加变量(Accmulator)AccumulatorParam
1.创建一个累加变量 public <T> Accumulator<T> accumulator(T initialValue, AccumulatorParam<T&g ...
- HDU 2243 考研路茫茫——单词情结(AC自动机+DP+快速幂)
题目链接 错的上头了... 这题是DNA的加强版,26^1 +26^2... - A^1-A^2... 先去学了矩阵的等比数列求和,学的是第二种方法,扩大矩阵的方法.剩下就是各种模板,各种套. #in ...
- C# ArrayList的用法
System.Collections.ArrayList类是一个特殊的数组.通过添加和删除元素,就可以动态改变数组的长度. 一.优点 1. 支持自动改变大小的功能 2. 可以灵活的插入元素 3. 可以 ...
- CSV格式数据如何导入MySQL?
经常有客户咨询如何将CSV文件导入到MySQL数据库中,特写此文介绍一种方便.快捷的方法. 我们要使用的辅助工具是著名的MySQL管理软件:Navicat for MySQL 1)我准备了一个字符编码 ...
- sphinx通过增量索引实现近实时更新
一.sphinx增量索引实现近实时更新设置 数据库中的已有数据很大,又不断有新数据加入到数据库中,也希望能够检索到.全部重新建立索引很消耗资源,因为我们需要更新的数据相比较而言很少. 例如.原来的数据 ...
- PHP初学习笔记(2015/4/8)
//echo C('name'); App/Action/IndexAction.class.php文件夹下的 URL模式 //输出URL模式 //echo C('URL_MODEL'),'<b ...
- jQuery 中的事件冒泡和阻止默认行为
1.事件冒泡 <%@ page language="java" import="java.util.*" pageEncoding="utf-8 ...
- requirejs使用
实现模块化.按需加载. 一.配置参数. 1.baseUrl:以一个相对于baseUrl的地址来加载所有的代码. data-main,使用它来启动脚本加载过程,而baseUrl一般设置到与该属性相一 ...