前一段做一个技术分享关于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. JAVA Day10

      使用继承 编写继承: class Engineer{ //公共的属性和方法 }   编写子类,继承父类, class SoftEnineer extends Enginerr{ //子类持有的属性 ...

  2. 模板函数(template function)出现编译链接错误(link error)之解析

    总的结论:    将template function 或者 template class的完整定义直接放在.h文件中,然后加到要使用这些template function的.cpp文件中. 1. 现 ...

  3. 版本管理之Git(二):Win7上Git安装及简单配置过程

    一.安装包 msysgit(Windows版本的Git) 下载地址:http://code.google.com/p/msysgit/downloads/list?q=full+installer+o ...

  4. blur和click事件的先后顺序问题

    这两个同时用会有冲突.懒得翻译了,需要的自己看哈. 以下摘自stackoverflow. I have an input field, where I try to make autocomplete ...

  5. php 小函数

    1 变量函数 a.is_xxx函数用来判断变量类型 is_numeric  (PHP 4, PHP 5) — 检测变量是否为数字或数字字符串 is_int.is_integer.is_long,判断变 ...

  6. 我觉得好用的VS扩展(不定期更新)

    首先向这些扩展的创作者致敬 这里都是2013版的  有些在给出的连接里有该扩展支持的其他版本连接 当然你也可以通过 VS->工具->扩展和更新->在线->搜索扩展名 来找到它们 ...

  7. cetnos 7 ntp服务的安装与配置

    首先需要搭建yum本地仓库 http://www.cnblogs.com/jw35/p/5967677.html   #搭建yum仓库方法 yum install ntp -y        #安装n ...

  8. MySQL函数操作数据库

    1.select语句查询信息(实现模糊查询) <form name="form1" method="post" action=""&g ...

  9. 团队作业week9 scenario testing

    1.How do you expect different personas to use your software? What’s their need and their goals,  how ...

  10. C#转摘

    尽量用Func和lambda解决函数变量问题,用var, dynamic来解决动态变量问题