Dapper
2016-12-19 14:27 只喝牛奶的杀手 阅读(1195) 评论(2) 编辑 收藏 举报前一段做一个技术分享关于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也需要注册
1 2 3 4 5 6 7 | public static void RegisterMaps() { AutoMapper.Mapper.Initialize(config => { config.CreateMap<CustomerViewModel, Customer>(); }); } |
这是一篇未写完的博客,还是发表了吧。如果谁对Dapper+automapper+FluentValidation这套架构感兴趣的话,可以联系我,技术转型,不再更新关于.NET的东西。
欢迎大家关注微信号killerhub,微信公众号名称:只喝牛奶的杀手, 扫下面的二维码或者收藏下面的二维码关注吧(长按下面的二维码图片、并选择识别图中的二维码)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端