C#常用的几个ORM框架及简单对比
ORM
=> 对象关系映射(英语:Object Relational Mapping)对于O/R,即 Object(对象)和 Relational(关系型数据),表示必须同时使用面向对象和关系型数据进行开发。
ORM框架
用途 => 为了解决 软件项目
与 数据库
打交道的中间层。
1.EntityFramework
可以直接写LINQ & Limbda语法,使用最为广泛,是有三种模式
Database First模式(在Oracle中不好用,因为会把Number(1)转成bool类型,很麻烦)
“数据库优先”,前提已有数据库表,根据表结构自动生成model,可以在Visual Studio模型设计器修改这些模型之间对应关系。
Model First模式
“模型优先”,这里的模型指的是“ADO.NET Entity Framework Data Model”,此时你的应用并没有设计相关数据库,在Visual Studio中我们通过设计对于的数据模型来生成数据库和数据类。
已有数据库和表,借住第三方工具(比如动软代码生成器)生成对应的Model,更新数据库表的时候需要手动更新项目中的Model。
Code First模式
“代码优先”模式,有两种方式。
此时没有对应数据库和表,自己创建Model,在Nuget包管理器->程序包管理器控制台执行命令update-database生成数据库和表格。(前提是config文件中有对应的connectionStrings)。
这样设计的好处是可以针对概念模型进行所有数据操作而不必关系数据的存储关系,可以更加自然的采用面向对象的方式进行面向数据的应用程序开发
2.Dapper
常用于.NET Core的程序中,优点是免费,效率高,更加小巧轻便,可以直接写SQL,甚至可以写多条SQL,但是参数与返回值要好好处理,尤其是返回值,对于返回多个不同List的结果比较难处理。
Dapper是通过对IDbConnection接口的扩展来操作数据库的,速度方面拥有微型ORM之王的称号。
要安装Dapper的dll
using (var db = new SqlConnection(SqlDB.ConnectionStringLocalTransaction)){var res = await db.QueryAsync<QC_MaterialCategory>("SELECT * FROM QC_MaterialCategory WHERE Code=@Code", new { Code = code });if (res.Count() > 0){return res.ToList()[0];}}//配置数据库连接public static readonly string ConnectionStringLocalTransaction = GetConnection();
//从SQLConfig.xml文件读取连接配置public static string GetConnection(){string conn = "";if (System.Web.HttpContext.Current != null){var ad = System.Web.HttpContext.Current.Server.MapPath("/SQLConfig.xml");conn = Common.XMLHelper.GetXmlNodeByXpath(System.Web.HttpContext.Current.Server.MapPath("/SQLConfig.xml"), "//SQLConfig//add[@key='PfMD']").Attributes["value"].Value;//conn = "Server =MW-J7YN957M9B7Q+'\'+MSSQLSERVER2012; Database = SOADB; User Id = sa; Password = sasa;";}else{conn = Common.XMLHelper.GetXmlNodeByXpath(System.IO.Path.Combine(System.Windows.Forms.Application.StartupPath, "SQLConfig.xml"), "//SQLConfig//add[@key='PfMD']").Attributes["value"].Value;}return conn;}
Dapper.Query(SQL)
Dapper.Execute(SQL,变量,事务,执行超时的时间,类型)
第二个参数-变量:DynamicParameters,可以把变量添加进去然后在sql语句中用@取出来用。
第三个参数:CommandType 指明是SQL语句还是存储过程
整体写法如
3.DButility
DButility下面有个SqlDB的Class
可以用 SqlDB.Query(sql) 执行查询语句,返回的是DataTable类型
用SqlDB.ExecuteNonQuery(sql) 执行增删改,返回的是受影响的行数
用法如下:
string sqlA = "SELECT * from ScanPlanTime where ContractNo='{0}'"; --SQL语句,其中{0}是下面Format语句中的参数顺序
sqlA = string.Format(sqlA, ContractNo);
dt_Exists = SqlDB.Query(sqlA).Tables[0]; 执行sqlA
EF和 Dapper简单对比
EF常用于EntityFramWork框架的解决方法,而Dapper更常用于.NET Core框架的解决方案
1.从语法来看,EF支持Linq语法,书写更加快捷,且有IDE帮忙验错,更易排查错误。而Dapper更倾向于SQL。
另外书写SQL语句时尽量不要用拼接字符串的形式组SQL,因为有被攻击或者SQL注入的风险,尽量用StringBulder。
StringBuilder sql = new StringBuilder();sql.AppendLine("SELECT TPC.*,S.SamplePlan,TP.Name AS TestName FROM QC_TestProjectConfig TPC ");sql.AppendLine("LEFT JOIN QC_Sampling S ON TPC.SampleId=S.Id ");sql.AppendLine("LEFT JOIN QC_TestProject TP ON TPC.TestId=TP.Id ");sql.AppendLine("WHERE 1=1 ");sql.AppendLine("AND (TPC.StationName LIKE @StationName OR @StationName= NULL) ");sql.AppendLine("AND (TPC.InspectionType LIKE @InspectionType OR @InspectionType= NULL) ");sql.AppendLine("AND (S.Id like @SampleId OR @SampleId=null) ");sql.AppendLine("AND (TP.Id LIKE @TestId OR @TestId=NULL) ");using (var db = new SqlConnection(SqlDB.ConnectionStringLocalTransaction)){var list = await db.QueryAsync<QC_TestProjectConfig>(sql.ToString(), new { StationName = string.Format("%{0}%", filter.StationName), InspectionType = string.Format("%{0}%", filter.InspectionType), SampleId = string.Format("%{0}%", filter.SampleId), TestId = string.Format("%{0}%", filter.TestId) });return list.ToList();}
2.Dapper更轻量,更高效,对于数据库比较简单的使用Dapper更方便。
3.同时使用EF或Dapper做数据请求时,通过SQL Server里面的 Profiler(分析器)来追踪请求可以发现 Dapper请求时生成的SQL语句比EF生成的SQL语句更简单。
C#常用的几个ORM框架及简单对比相关推荐
- php mysql orm_PHP ORM框架与简单代码实现(转)
对象关系映射(Object Relational Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据 ...
- Java orm框架的优缺点,ORM框架的简单介绍
1. 什么是ORM? 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术.简单来说,将程序中的兑现自动持久化 ...
- ORM框架---JOOQ简单介绍
一,什么是JOOQ 继Hibernate Mybatis 之后的又一ORM框架 二,特点 1.get back in control of your sql 2.DSL(Domain Specific ...
- ORM框架的简单介绍
1. 什么是ORM? 对象-关系映射(Object-Relational Mapping,简称ORM),面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放 ...
- 10分钟手撸极简版ORM框架!
最近很多小伙伴对ORM框架的实现很感兴趣,不少读者在冰河的微信上问:冰河,你知道ORM框架是如何实现的吗?比如像MyBatis和Hibernte这种ORM框架,它们是如何实现的呢? 为了能够让小伙伴们 ...
- Python数据库操作之ORM框架
前言 之前在github上下载开源项目,里面使用到SQLAlchemy框架,现在想研究一下具体实现 介绍 基本的操作数据库是Mysql官方的MySQL-connector驱动,来完成数据库的连接和使用 ...
- 很多小伙伴不太了解ORM框架的底层原理,这不,冰河带你10分钟手撸一个极简版ORM框架(赶快收藏吧)
大家好,我是冰河~~ 最近很多小伙伴对ORM框架的实现很感兴趣,不少读者在冰河的微信上问:冰河,你知道ORM框架是如何实现的吗?比如像MyBatis和Hibernate这种ORM框架,它们是如何实现的 ...
- mysql .net orm_目前的.NET(C#)世界里,主流的ORM框架
推荐一些常用的asp.net ORM框架 SqlSugar SqlSugar是国人开发者开发的一款基于.NET的ORM框架,是可以运行在.NET 4.+ & .NET CORE的高性能.轻量级 ...
- 什么是ORM框架?常用的orm框架有哪些?能否不用ORM框架直接使用SQL语句创建WebAPI?
ORM(Object-Relational Mapping,对象关系映射)框架是一种将面向对象程序中的实体类(对象)与关系型数据库中的表之间建立映射关系的技术.它允许开发人员使用面向对象编程语言来操作 ...
最新文章
- WebSocket探秘
- 查看终端进程是否死掉技巧
- 错误笔记(1)——关于克隆虚拟机引发的后续问题
- CSS 颜色 表示方法
- Imbalanced data – Finding Waldo
- JSON和XML:它们如何比较?
- 玩转oracle 11g(39):oracle11g密码过期后的解决方法
- tensorflow python3.6_[教程]Tensorflow + win10 + CPU + Python3.6+ 安装教程
- Oracle 10g、11g :RAC关闭、启动、重启步骤
- zynq+linux固化程序,MiZ702学习笔记6——ZYNQ如何固化程序
- 16.Java中的String详解
- ppp lcp协商报文有哪些_PPP 点到点协议
- 新商用密码产品认证梳理——检测和认证机构篇
- IIS与CuteFTP进行网站发布
- php日志在哪,php日志在哪
- 如何升级Windows 11正式版?四种方案都在这里了
- #读书笔记#《富爸爸窮爸爸》 | Rich Dad Poor Dad 罗伯特.清崎 Robert Kiyosaki
- 基于PaddlePaddle实现的DeepSpeech2端到端中文语音识模型
- Arcpy基础入门-6、arcpy要素属性操作
- 基础STM32—点亮灯
热门文章
- 产品经理常用的数据指标(KPI)——付费用户
- VM虚拟机安装并使用window10
- 前端基础-CSS的属性相关设置
- AtCoder Beginner Contest 300G - P-smooth number解题报告
- 苹果将于10月18日举行新品发布会,新款AirPods、MacBook Pro即将亮相
- 微信小程序 判断手机机型,iPhone X及以上机型留出底部空白
- 自动化测试框架Pytest(三)——自定义allure测试报告
- 惊艳死你的各种好用工具
- 2020C证(安全员)证考试及C证(安全员)实操考试视频
- fft频谱 matlab,matlab流水线ADC仿真FFT频谱测试【求高手搭救】