.Net下几种ORM框架的对比

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进行暖机操作

// EF暖机操作,将映射加载到内存中
using (var db = new MyAppDBContext())
{
    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.List<System.Data.Entity.Core.Metadata.Edm.EdmSchemaError>());
}

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

using(SqlConnection conn = new SqlConnection(connstr))
{
    var list = conn.Query<Article>("select * from article");  //Article实体
    foreach(var item in list)
    {
      console.WriteLine(item.Title);
    }
}

//Dapper多表查询
using(SqlConnection conn = new SqlConnection(connstr))
{
    var list = conn.Query("select t2.Title from TbHead t1,TbItem t2 where t1.id = t2.id");
    foreach(var item in list)
    {
      console.WriteLine(item.Title); //运行时动态推断类型
    }
}

//Dapper同时查询多个表
using(SqlConnection conn = new SqlConnection(connstr))
{
    using(var reader = conn.QueryMultiple("select * from TbHead;select * from TbItem"))
    {
        var list = reader.Read<TbHead>();
        foreach(var item in list)
        {
           console.WriteLine(item.Title);
        }
    }
}

//Dapper插入数据
using(SqlConnection conn = new SqlConnection(connstr))
{
    var count= conn.Execute("insert into Article(title,content) values(‘@title‘,‘@content‘);",new {title="测试标题",content="测试内容"});
    foreach(var item in list)
    {
      console.WriteLine(item.Title); //运行时动态推断类型
    }
}

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

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

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

using(var context = new DbContext())
{
    var list = context.Query<Article>("select * from article");
    foreach(var item in list)
    {
       console.WriteLine(item.Title);
    }
}

//PetaPoco插入
var article = new Article{ Title="测试标题",Content="测试内容" };
var count = article.Insert();
时间: 2024-10-12 09:19:17

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

几种机器学习框架的对比和选择

几种机器学习平台的对比和选择 前言 选择什么样的深度学习框架一直是开发者非常关心的一个话题,而且深度学习框架之间的「战争」也越来越激烈.随着近几年AI的火热,越来越多的出现有关各个机器学习框架的对比文章,且随着 Python 逐渐成为机器学习社区最受欢迎的语言,支持 Python的深度学习框架的性能也在持续的被关注. 由于自己想了解下机器学习,随机查阅了诸多文献给予此,将横向的对比以下深度学习框架和工具的特点: Theano Lasagne Blocks TensorFlow Keras MXN

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

从刚刚开始接触ORM到现在已有超过八年时间,用过了不少ORM框架也了解了不少ORM框架,看过N种关于ORM框架的相关资料与评论,各种言论让人很难选择.在ORM的众多问题中最突出的问题是关于性能方面的问题,因此我在看了国外的一遍文章(Dapper vs Entity Framework vs ADO.NET Performance Benchmarking)后受到启发,在这个文章的基础上扩展了测试用例分享给大家. 模型准备 数据初始化 测试用例说明 测试结果 结果分析 模型准备 用于测试是模型是基

ORM框架的前世今生

目录 一.ORM简介二.ORM的工作原理三.ORM的优缺点四.常见的ORM框架 一.ORM简介 ORM(Object Relational Mapping)对象关系映射,一般指持久化数据和实体对象的映射 数据存储是绝大多数软件系统都要接触到的技术,具有一定规模的软件产品,为了方便存储和管理数据,便引入了数据库这一工具,但是数据如何从程序写入数据库的呢? 为方便程序员通过代码将数据写入数据库,一般的语言开发的厂商都会为各种数据库适配数据库连接的驱动程序,比如ADO.Net,JDBC等. 但是数据库

[转帖]ORM框架的前世今生

https://www.cnblogs.com/7tiny/p/9551754.html 目录 一.ORM简介二.ORM的工作原理三.ORM的优缺点四.常见的ORM框架 一.ORM简介 ORM(Object Relational Mapping)对象关系映射,一般指持久化数据和实体对象的映射 数据存储是绝大多数软件系统都要接触到的技术,具有一定规模的软件产品,为了方便存储和管理数据,便引入了数据库这一工具,但是数据如何从程序写入数据库的呢? 为方便程序员通过代码将数据写入数据库,一般的语言开发的

Spring源码阅读:Spring如何支持各种ORM框架

为了让开发程序更容易,到现在为止,已经有很多ORM框架了,例如:JPA,JDO,Hibernate,Mybatis(之前版本是IBatis)等等.也正因为已经有这么多优秀的ORM框架,Spring团队并没有自己开发一套ORM框架,而是对这些框架都进行了支持,让这些框架在Spring环境下可以得到完全的应用. 通常,在Spring环境下使用这些ORM框架时,都会通过一个Template来使用.Spring对这些框架的集成是这样的: 例如Hibernate,在使用Hibernate时(没有在Spri

Android --- GreenDao的实现(ORM框架)

今天看了下Android的ORM框架,然后就看到了GreenDao这个东东....感觉用了这个操作数据库就变得简单多了,不用再写那些SQL语句,和Hibernate框架挺像的....GreenDao就是将java对象映射到Sqlite数据库,通过对java对象进行存储.更新.删除.查询来操作数据库,简单化数据库操作. 配置环境 首先要引入两个jar包 compile 'de.greenrobot:greendao-generator:2.0.0' compile 'de.greenrobot:g

Mego(2) - NET主流ORM框架分析

接上文我们测试了各个ORM框架的性能,大家可以很直观的看到各个ORM框架与原生的ADO.NET在境删改查的性能差异.这里和大家分享下我对ORM框架的理解及一些使用经验. ORM框架工作原理 典型ORM框架实现 EF功能最强的ORM EF与EFCore缺陷 ORM框架工作原理 所有的ORM框架的工作原理都离不开下面这张图,只是每个框架的实现程度不同但是最终的目的是相同的. 如果是一个ORM框架那么一定会有上图中蓝色部分的这几个元素,无论是增删改查对于ORM一定是以对象为起点,使用对象构造出LINQ

几种流行Webservice框架性能对比

1摘要 开发webservice应用程序中离不开框架的支持,当open-open网站列举的就有很多种,这对于开发者如何选择带来一定的疑惑.性能Webservice的关键要素,不同的框架性能上存在较大差异,而当前在官方网站.网络资料中可以方便的找到各自框架的介绍,但是很少有针对不同框架性能测试数据.本文选择了比较流行几个框架: Apache Axis1.Apache Axis2.Codehaus XFire.Apache CXF.Apache Wink.Jboss  RESTEasy.sun JA

各种ORM框架对比(理论篇,欢迎来观摩)

各种ORM框架对比 目前框架有以下 PetaPoco Dapper.NET Massive Simple.Data Chain PetaPoco 轻量级,以前单文件,目前有维护形成项目级别,适合多个数据库,开发入手比较快,二次开发扩展简单,模型Emit映射,数据交互需要Code,并且需要编写脚本,接口上有自动翻页,支持多对象查询返回 使用示例: //保存对象 db.Save(article); db.Save(new Article { Title = "Super easy to use Pe