网站提升流量,外贸营销推广平台有哪些,中国深圳航空公司官方网站,东莞公司注册服务平台什么是ORM? 对象关系映射#xff08;英语#xff1a;Object Relation Mapping#xff0c;简称ORM#xff0c;或O/RM#xff0c;或O/R mapping#xff09;#xff0c;是一种程序技术#xff0c;用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说英语Object Relation Mapping简称ORM或O/RM或O/R mapping是一种程序技术用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。 一般的ORM包括以下四部分一个对持久类对象进行CRUD操作的API一个语言或API用来规定与类和类属性相关的查询一个规定MAPPING METADATA的工具一种技术可以让ORM的实现同事务对象一起进行DIRTYCHECKING, LAZY ASSOCIATION FETCHING以及其他的优化操作。 本次对比的.NET ORM框架 1. Entity Framework 官网 https://msdn.microsoft.com/zh-cn/data/ef.aspx 2. Dapper 官网 https://github.com/StackExchange/dapper-dot-net 3. PetaPoco 官网 http://www.toptensoftware.com/petapoco/ 对比因素 1. 操作的难易程度 2. 执行的效率 3. 跨数据库的使用 Entity Framework 1.新建C#控制台 2. 使用NuGet引用EF组件 项目引用 右键 管理NuGet程序包 在联机里下载并安装Entity Framework 项目右键 新建 添加 新建项 ADO.NET实体数据模型 我这里的CLN用的是数据库名 添加过以后 有一个实体模型数据向导 选择 从数据库生成 下一步 这里是配置数据库连接 新建连接 将App.Config的实体连接设置为CLNContext 然后又出现一个对话框 -- 您要在模型中包含哪些数据库对象这里把表勾上点击完成就OK了然后会弹出两个警告框这是因为有两个TT模板需要执行不用管它确定就行了这是出现了Edmx数据库模型关系图 接下来就是进入项目的 Program.cs里面写代码了 static void Main(string[] args){Stopwatch S new Stopwatch(); //秒表对象 计时S.Start(); var DBContext new CLNContext(); foreach (var item in DBContext.NT_Photo){Console.WriteLine(item.PostIP);}Console.WriteLine(S.Elapsed);Console.ReadKey();} NT_Photo 表里有600多条数据这里看到查询的速度还是蛮快的 EF用时5.9秒 Dapper 1.同样新建控制台程序 2. NuGet引用Dapper Dapper没有EF那么强大相当于一个SqlHelper我们需要手动配置连接字符串这里把刚才EF生成的NT_Photo.cs 模型类放到项目里面然后就是就是进入到Program.cs里面写代码了 using System; using System.Collections.Generic; using System.Configuration; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; using Dapper; using System.Diagnostics; using System.Threading; namespace DapperForsql { class Program { static void Main(string[] args) { Stopwatch w new Stopwatch(); w.Start(); var str data source.;initial catalogCLN20140830;integrated securityTrue; SqlConnection Con new SqlConnection(str); var list Con.QueryNT_Photo(select * from NT_Photo); foreach (var item in list) { Console.WriteLine(item.PostIP); } Console.WriteLine(w.Elapsed); Console.ReadKey(); } } } 我们这里用了SqlConnertion对象因为Dapper是对IDbConnection做了扩展 SqlConnection是实现了IDbConnection然后在我们引用Dapper的命名空间using Dapper; 这里可以看到Dapper比EF更快 Dapper用时3.0秒 PetaPoco 1.同样新建控制台程序 2.使用NuGet引用PetaPoco组件 3.配置App.Config里的连接字符串 ?xml version1.0 encodingutf-8 ?
configurationconnectionStringsadd nameCLNContext connectionStringdata source.;initial catalogCLN20140830;integrated securityTrue; providerNameSystem.Data.SqlClient //connectionStringsstartup supportedRuntime versionv4.0 sku.NETFramework,Versionv4.5 //startup
/configuration 4. 安装PetaPoco后同样会自动生成数据库访问上下文和模型Model这里打开 Models - Database.tt 修改 ConnectionStringName CLNContext;这里要和App.Config里的连接字符串保持一致,更改过以后保存会自动生成数据库访问上下文Models - Database.tt - Database.cs 5.准备工作完毕就是进入正题了同样进入到 Program.cs static void Main(string[] args){ var Context new CLNContext.CLNContextDB();Stopwatch s new Stopwatch();s.Start(); var list Context.QueryNT_Photo(select * from NT_Photo); foreach (var item in list){Console.WriteLine(item.PostIP);}Console.WriteLine(s.Elapsed);Console.ReadKey();} 这里PetaPoco 也有数据库访问上下文CLNContextDB()不过也是需要写SQL语句的先看一下查询速度 在这里可以看到PetaPoco貌似更快 PetaPoco用时2.4秒 其实PetaPoco更强大的是它对模型做了增删改查的方法这就非常方便了 NT_Photo PP new NT_Photo(); var res PP.Insert(); //res就是返回插入的数据的ID 对比结果: 这里可以看到EFDapperPetaPoco 的差别了 NT_Photo 600多条数据 EF ------ 5.9秒 Dapper ------- 3.0秒 PetaPoco ------- 2.4秒 其实EF第一次的话会慢一些第一次会把一些模型数据加载到内存中后面就非常快了这里贴一个EF 暖机代码 //EF暖机 using (var db new CLNContext()){ var objectContext ((IObjectContextAdapter)db).ObjectContext; var mappingCollection (System.Data.Entity.Core.Mapping.StorageMappingItemCollection)objectContext.MetadataWorkspace.GetItemCollection(System.Data.Entity.Core.Metadata.Edm.DataSpace.CSSpace);mappingCollection.GenerateViews(new System.Collections.Generic.ListSystem.Data.Entity.Core.Metadata.Edm.EdmSchemaError());} 总结每个ORM的存在都有它的价值不能说哪个哪个好EF是微软自家推出的很多代码都是自动生成的一句SQL语句都不用写确实非常方便但是EF的包很大有5M多而且微软封装好的也不太利于扩展像写一些复杂的SQl语句就不是很方便了Dapper 和PetaPoco相比下来都是比较轻的而且用起来的话也是非常灵活的。哪一个更适合你的项目用起来更顺手才是最好的选择方案。 原文地址http://www.cnblogs.com/myshowtime/p/5951270.html .NET社区新闻深度好文微信中搜索dotNET跨平台或扫描二维码关注