前一段做一个技术分享关于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的更多相关文章

  1. Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程+事物案例演示

    Dapper的牛逼就不扯蛋了,答应群友做个入门Demo的,现有园友需要,那么公开分享一下: 完整Demo:http://pan.baidu.com/s/1i3TcEzj 注 意 事 项:http:// ...

  2. Dapper扩展之~~~Dapper.Contrib

    平台之大势何人能挡? 带着你的Net飞奔吧!http://www.cnblogs.com/dunitian/p/4822808.html#skill 上一篇文章:Dapper逆天入门~强类型,动态类型 ...

  3. 由Dapper QueryMultiple 返回数据的问题得出==》Dapper QueryMultiple并不会帮我们识别多个返回值的顺序

    异常汇总:http://www.cnblogs.com/dunitian/p/4523006.html#dapper 今天帮群友整理Dapper基础教程的时候手脚快了点,然后遇到了一个小问题,Dapp ...

  4. 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 ...

  5. Dapper where Id in的解决方案

    简单记一下,一会出去有点事情~ 我们一般写sql都是==>update NoteInfo set NDataStatus=@NDataStatus where NId in (@NIds) Da ...

  6. ASP.NET Core 1.0 使用 Dapper 操作 MySql(包含事务)

    操作 MySql 数据库使用MySql.Data程序包(MySql 开发,其他第三方可能会有些问题). project.json 代码: { "version": "1. ...

  7. Asp.Net Core + Dapper + Repository 模式 + TDD 学习笔记

    0x00 前言 之前一直使用的是 EF ,做了一个简单的小项目后发现 EF 的表现并不是很好,就比如联表查询,因为现在的 EF Core 也没有啥好用的分析工具,所以也不知道该怎么写 Linq 生成出 ...

  8. 搭建一套自己实用的.net架构(3)续 【ORM Dapper+DapperExtensions+Lambda】

    前言 继之前发的帖子[ORM-Dapper+DapperExtensions],对Dapper的扩展代码也进行了改进,同时加入Dapper 对Lambda表达式的支持. 由于之前缺乏对Lambda的知 ...

  9. mono for android中使用dapper或petapoco对sqlite进行数据操作

    在mono for android中使用dapper或petapoco,很简单,新建android 类库项目,直接把原来的文件复制过来,对Connection连接报错部分进行注释和修改就可以运行了.( ...

  10. 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. ...

随机推荐

  1. VMware下虚拟机的转移

    将虚拟机文件夹整个拷贝到另一台电脑上: 打开.vmx文件 打开即可: 注意:Mac系统的虚拟机要先用unlocker206破解,才能运行OS系统.

  2. Hdu5093 Battle ships 二分图

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission( ...

  3. 一步一步打造自己的Android图片浏览器(原创)

    今天我们试着来制作一个自己的Android图片浏览器. 图片浏览器应该具有什么功能呢?鉴于不同的人不同的理解,这里提出一个基本的需求: 搜索手机内的所有图片,展示于一个列表中: 列表中展示的是图片的缩 ...

  4. 首师大附中互测题:99999999海岛帝国后传:算法大会【D001】

    [D001]99999999海岛帝国后传:算法大会[难度:D] ———————————————————————————————————————————————————————————————————— ...

  5. Java-Android【1】-控制手机震动

    一.配置震动授权 1.在AndroidManifest.xml文件中添加<manifest></manifest>中添加一行 <uses-permission andro ...

  6. nginx中配置pathinfo模式示例

    要想让nginx支持PATH_INFO,首先需要知道什么是pathinfo,为什么要用pathinfo? pathinfo不是nginx的功能,pathinfo是php的功能. php中有两个path ...

  7. 冰球项目日志2-yjw

    我们小组在12.31号进行了讨论,确定了基本的任务及分工,后面是元旦放假,大家没有做很多的东西,我也是把自己分工的部分方案想了下. 后面在1.3号,我们会再进行一次小组讨论,确定下最终的方案,然后进行 ...

  8. JS 生成GUID 方法

    var Guid={NewGuid: function () { var guid = (this._G() + this._G() +"-"+ this._G() +" ...

  9. NOIp #2009

    http://files.cnblogs.com/files/radiumlrb/NOIP2009%E6%8F%90%E9%AB%98%E7%BB%84%E5%A4%8D%E8%B5%9B%E8%AF ...

  10. 2016 CCPC 东北地区重现赛

    1. 2016 CCPC 东北地区重现赛 2.总结:弱渣,只做出01.03.05水题 08   HDU5929 Basic Data Structure    模拟,双端队列 1.题意:模拟一个栈的操 ...