• ORM框架详解


    .Net开源微型ORM框架测评

      什么是ORM?

          对象关系映射(英语: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 catalog=CLN20140830;integrated security=True";

                SqlConnection Con = new SqlConnection(str);

                var list = Con.Query<NT_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 version="1.0" encoding="utf-8" ?>

    <configuration>

      <connectionStrings>

        <add name="CLNContext" connectionString="data source=.;initial catalog=CLN20140830;integrated security=True;" providerName="System.Data.SqlClient" />

      </connectionStrings>

        <startup> 

            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.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.Query<NT_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

    对比结果:

    这里可以看到EF,Dapper,PetaPoco 的差别了

    NT_Photo 600多条数据

    EF            ------   5.9秒

  • 相关阅读:
    性能测试中的二八原则
    OS + Linux Shell Programme / 100 cases
    db postgres openGauss
    OS + Linux sshkeygen / sshcopyid / id_rsa / id_rsa.pub / authorized_keys
    OS + Android performance matrix / memory LeakCanary
    springBoot 使用ConfigurationProperties+PropertySource注解 引入yml配置文件
    SpringBoot2.0集成WebSocket,实现后台向前端推送信息
    springBoot + rabbitMQ +手动确认消息 + 控制(接口、定时任务)消费者上下线
    linux 环境下安装keepalived 并且进行简单的主备配置
    eureka 注册列表低延迟注册、剔除服务配置 实现8s延迟
  • 原文地址:https://www.cnblogs.com/zhangxiaolei521/p/6224005.html
Copyright © 2020-2023  润新知