1、Entity Framework(重量级)
2、NHibernate(重量级)
3、Dapper(轻量级)
4、PetaPoco(轻量级)
5、MyBatis.Net (介于EF和Dapper之间)

对比:操作的难易程度、执行效率、跨数据库

应用程序的组成必须有数据库
开发人员的职责:编写业务和功能性代码
如果让开发人员去学习数据库增加了开发成本,将数据库操作封装为代码级别的API让程序员调用,实现了职责分离

(1)Entity Framework
NuGet 安装EF
命令行输入:Install-Package EntityFramework -Version 版本号 (不知道安装什么组件时可以按Tab键自动补齐)

Model First 生成一个edmx文件,存储xml格式数据,保存表和对象的映射,因此运行速度快一些
Code First 不需要edmx文件,映射xml临时加载到内存当中,因为要生成映射所以耗费一些额外的时间

安装MySql驱动
Install-Package MySql.Data.Entity

EF第一次运行要加载edmx数据库映射,因此会比较慢。所以我们可以对EF进行预热,在用户第一次查询之前(应用程序启动时)让EF进行暖机操作

  1. // EF暖机操作,将映射加载到内存中
  2. using (var db = new MyAppDBContext())
  3. {
  4. var objectContext = ((IObjectContextAdapter)db).ObjectContext;
  5. var mappingCollection = (System.Data.Entity.Core.Mapping.StorageMappingItemCollection)objectContext.MetadataWorkspace.GetItemCollection(System.Data.Entity.Core.Metadata.Edm.DataSpace.CSSpace);
  6. mappingCollection.GenerateViews(new System.Collections.Generic.List<System.Data.Entity.Core.Metadata.Edm.EdmSchemaError>());
  7. }

(2)Dapper
使用扩展方法对System.Data.Common命名空间中DbConnection类实现的接口IDbConnection进行了扩展
Nuget搜索Dapper dot net并安装(引用仅有一个dll)

  1. using(SqlConnection conn = new SqlConnection(connstr))
  2. {
  3. var list = conn.Query<Article>("select * from article"); //Article实体
  4. foreach(var item in list)
  5. {
  6. console.WriteLine(item.Title);
  7. }
  8. }
  9.  
  10. //Dapper多表查询
  11. using(SqlConnection conn = new SqlConnection(connstr))
  12. {
  13. var list = conn.Query("select t2.Title from TbHead t1,TbItem t2 where t1.id = t2.id");
  14. foreach(var item in list)
  15. {
  16. console.WriteLine(item.Title); //运行时动态推断类型
  17. }
  18. }
  19.  
  20. //Dapper同时查询多个表
  21. using(SqlConnection conn = new SqlConnection(connstr))
  22. {
  23. using(var reader = conn.QueryMultiple("select * from TbHead;select * from TbItem"))
  24. {
  25. var list = reader.Read<TbHead>();
  26. foreach(var item in list)
  27. {
  28. console.WriteLine(item.Title);
  29. }
  30. }
  31. }
  32.  
  33. //Dapper插入数据
  34. using(SqlConnection conn = new SqlConnection(connstr))
  35. {
  36. var count= conn.Execute("insert into Article(title,content) values('@title','@content');",new {title="测试标题",content="测试内容"});
  37. foreach(var item in list)
  38. {
  39. console.WriteLine(item.Title); //运行时动态推断类型
  40. }
  41. }

Dapper连接MySql
使用NuGet下载MySql数据库驱动,修改连接字符串,将SqlConnection等类名改为MySqlConnection即可。

  1. //跨数据库操作,代码通用,不需要修改任何代码(不同数据库sql语法不同要修改)
  2. //通过连接字符串的Provider来创建不同数据库的连接对象
  3. var connStr = ConfigurationManager.ConnectionString["conn"];
  4. using(IDbConnection conn = DbProviderFactories.GetFactory(connStr.ProviderName).CreateConnection())
  5. {
  6. conn.ConnectionString = connStr.ConnectionString;
  7. var list = conn.Query<Article>("select * from article"); //Article实体
  8. foreach(var item in list)
  9. {
  10. console.WriteLine(item.Title);
  11. }
  12. }

3、PetaPoco(增删改不需要自己写sql语句)
Nuget下载PetaPoco,安装时会自动生成模板
其中在DataBase.tt模板文件中修改配置ConnectionStringName为连接字符串的name,其他配置修改可选

  1. using(var context = new DbContext())
  2. {
  3. var list = context.Query<Article>("select * from article");
  4. foreach(var item in list)
  5. {
  6. console.WriteLine(item.Title);
  7. }
  8. }
  9.  
  10. //PetaPoco插入
  11. var article = new Article{ Title="测试标题",Content="测试内容" };
  12. var count = article.Insert();

.Net下几种ORM框架的对比的更多相关文章

  1. sqlsugar freesql hisql 三个ORM框架性能测试对比

    hisql与目前比较流行的ORM框架性能测试对比 总体测试结果 插入记录数 hisql(耗时) sqlsugar(耗时) freesql(耗时) 5条 0.0107秒 0.0312秒 0.02675秒 ...

  2. Mego(1) - NET中主流ORM框架性能对比

    从刚刚开始接触ORM到现在已有超过八年时间,用过了不少ORM框架也了解了不少ORM框架,看过N种关于ORM框架的相关资料与评论,各种言论让人很难选择.在ORM的众多问题中最突出的问题是关于性能方面的问 ...

  3. Net Core下多种ORM框架特性及性能对比

    在.NET Framework下有许多ORM框架,最著名的无外乎是Entity Framework,它拥有悠久的历史以及便捷的语法,在占有率上一路领先.但随着Dapper的出现,它的地位受到了威胁,本 ...

  4. .Net 常用ORM框架对比:EF Core、FreeSql、SqlSuger

    前言: 最近由于工作需要,需要选用一种ORM框架,也因此对EF Core.FreeSql.SqlSuger作简单对比.个人认为各有有优势,存在即合理,不然早就被淘汰了是吧,所以如何选择因人而议.因项目 ...

  5. c# sqlsugar,hisql,freesql orm框架全方位性能测试对比 sqlserver 性能测试

    在2022年1月份本人做过一次sqlsugar,hisql,freesql三个框架的性能测试,上次主要是测的sqlserver下的常规插入(非bulkcopy的方式数据插入),hisql与目前比较流行 ...

  6. Java Web J2EE下的两大框架SSH和SSM对比

    当下流行的两种企业开发MVC开源框架,是我们Java程序猿必备知识能力.MVC,即模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界 ...

  7. 轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)

    轻量级ORM框架QX_Frame.Bantina系列讲解(开源) 一.框架简介 http://www.cnblogs.com/qixiaoyizhan/p/7417467.html 二.框架使用方式介 ...

  8. ORM框架的前世今生

    目录 一.ORM简介二.ORM的工作原理三.ORM的优缺点四.常见的ORM框架 一.ORM简介 ORM(Object Relational Mapping)对象关系映射,一般指持久化数据和实体对象的映 ...

  9. Java回顾之ORM框架

    这篇文章里,我们主要讨论ORM框架,以及在使用上和JDBC的区别. 概述 ORM框架不是一个新话题,它已经流传了很多年.它的优点在于提供了概念性的.易于理解的数据模型,将数据库中的表和内存中的对象建立 ...

随机推荐

  1. 13. 字符串转为json对象或json数组

    ##########1.json字符串转json数组########### var str="[{name:'zhangsan',age:'24'},{name:'lisi',age:'30 ...

  2. 混合式应用真机调试(Android Studio + Chrome)

    如何在chrome上调试混合式APP https://developers.google.com/web/tools/chrome-devtools/remote-debugging/ Get Sta ...

  3. twisted reactor分析

    调用reactor.run(),就会调用到mainloop函数,从而调用到select或epoll,监控fd的读写. posixbase.py: def listenTCP(self, port, f ...

  4. markdown的试用

    因为markdown,我接触到latex,因为latex,我花了几个月去看相关的书籍 我看了以下相关的资料 1.<LaTeX入门> 刘海洋 2.英文 TeX - LaTeX Stack E ...

  5. 01.hadoop集群环境搭建

    hadoop集群搭建的步骤 1.安装jdk2修改ip地址3.关闭防火墙4.修改hostname5.设置ssh自动登陆6.安装hadoop-------------------------------- ...

  6. <基础> PHP 进阶之 抽象类(abstract)、接口(interface)、Trait(特征)

    抽象类 PHP 5 支持抽象类和抽象方法.定义为抽象的类不能被实例化. 抽象方法只能在抽象类中,抽象类中可以包含非抽象方法 被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现 继 ...

  7. Duboo 与springboot整合

    https://github.com/apache/incubator-dubbo-spring-boot-project 当采用properties方式时,可以用下方的注解 1.pom <de ...

  8. uiautomator:Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncException: Remote object doesn't exist!

    尝试用android sdk的uiautomatorviewer抓元素的时候报错:Error while obtaining UI hierarchy XML file: com.android.dd ...

  9. 解决eclipse新建项目看不到src/main/java目录办法

    1.eclipse->window->preferences->java->compiler->选择本地要用的Java版本 2.eclipse->window-&g ...

  10. Java基础之用记事本编辑java代码运行,并且打成jar包后运行

    使用记事本写java代码 1.在d盘新建一个记事本,名字叫做zhanzhuang.java,会询问不可用,是否继续,点击是 2.在里面编辑就如下内容,注意文件的名字要和 class 后面的名字相对应 ...