• .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();
  • 相关阅读:
    Java入门
    Java入门
    字符串常用方法(转载--https://www.cnblogs.com/ABook/p/5527341.html)
    SSM-8FastDfs搭建
    SSM7-nginx的反向代理和负载均衡
    SSM-6nginx Linux下的安装
    SSM-5zookeeper在LINUX上自启
    SSM4-Linux上jdk、tomcat、zookeeper------tar zxvf的安装
    SSM3-SVN的安装和搭建环境
    SSM2-搭建maven常见的错误以及解决方法
  • 原文地址:https://www.cnblogs.com/yaotome/p/7124086.html
Copyright © 2020-2023  润新知