我的ORM之六-- 批量
很多时候,批量方案是解决性能的关键
批量插入
SqlBulkCopy
利用 SqlBulkCopy 是性能最高的方式
实现:
var s = dbr.Menu.NewMyOqlSet();
s.AddRow(o => o.Id == & o.Name == "");
s.AddRow(o => o.Id == & o.Name == "");
s.BulkCopy2Db();
Insert2Db 方法:(内部调用BeginBatchInsert 方法)
var set = dbr.Menu.NewMyOqlSet();
set.Columns = new Columns(dbr.Menu.Name).ToArray();
set.AddRow(o => o.Name == "");
set.AddRow(o => o.Name == "");
set.Insert2Db();
BeginBatchInsert:
var set = dbr.Menu.BeginBatchInsert(dbr.Menu.Name);
set.Insert(o => o.Name == "");
set.Insert(o => o.Name == "");
set.Execute();
生成如下SQL:
insert into [S_Menu]
([Name])
output inserted.[ID]
values
(''),('');
批量更新
Update2Db:(内部调用 BeginBatchUpdate)
var s = dbr.Menu.NewMyOqlSet();
s.AddRow(o => o.Id == 1 & o.Name == "33");
s.AddRow(o => o.Id == 2 & o.Name == "444");
s.Update2Db(o => o.CorpID == 1, o => new SimpleColumn[] { o.Id }, o => new SimpleColumn[] { o.Name });
Update2Db方法中的
第一个参数是 Where 的条件,表示一个基本的数据约束,用于防止数据污染。可以为 null
第二个参数表示关联的唯一列
第三个参数是 更新时设置的列。
BeginBatchUpdate方法
var beg = dbr.Menu.BeginBatchUpdate(o=>o.CorpID == 1 ,o=>o.Id);
beg.Update(o => o.Name == "" & o.Id == );
beg.Update(o => o.Name == "" & o.Id == );
beg.Execute();
生成的SQL:(MySql)
CREATE TEMPORARY TABLE `Temp_MyOql_16`(
`PID` int,`Css` varchar(50),
`Url` varchar(250),
`Wbs` varchar(50),
`IsLeaf` bit,
`Name` nvarchar(50),
`SortID` real,
`Group` nvarchar(50),
`IsValidate` bit,
`ID` int)
ENGINE=MEMORY DEFAULT CHARSET=utf8; insert into `Temp_MyOql_16`(`PID`,`Css`,`Url`,`Wbs`,`IsLeaf`,`Name`,`SortID`,`Group`,`IsValidate`,`ID`) values
(null,null,null,null,null,'',null,null,null,1),
(null,null,null,null,null,'',null,null,null,2); UPDATE `S_Menu` AS t,
`Temp_MyOql_16` AS o
SET
t.`PID` = o.`PID`,
t.`Css` = o.`Css`,
t.`Url` = o.`Url`,
t.`Wbs` = o.`Wbs`,
t.`IsLeaf` = o.`IsLeaf`,
t.`Name` = o.`Name`,
t.`SortID` = o.`SortID`,
t.`Group` = o.`Group`,
t.`IsValidate` = o.`IsValidate`
WHERE
t.`CorpID` = 1 and t.`ID` = o.`ID`; drop table `Temp_MyOql_16`;
批量推送
批量推送,是结合批量更新和批量,当有一个数据集,需要更新或添加到数据库中时使用。有则更新,无则添加。
var insertType = dbr.PlatForm.CarType.NewMyOqlSet();
//insertType.添加数据
insertType.Save2Db(o => null, o => o.OtherID, true);
Save2Db方法中的
第一个参数:是更新的条件 。
第二个参数是 更新时,关联的唯一列。
第三个参数表示是否要保留 更新条件结果集 - MyOqlSet结果集。 如: 参数为false , 更新条件是 Id < 100 , MyOqlSet 结果集的Id 是 1-50 ,则删除数据库中 Id 从50到100 的记录。
我的ORM之六-- 批量的更多相关文章
- Django orm 实现批量插入数据
Django ORM 中的批量操作 在Hibenate中,通过批量提交SQL操作,部分地实现了数据库的批量操作.但在Django的ORM中的批量操作却要完美得多,真是一个惊喜. 数据模型定义 首先,定 ...
- 我的ORM汇总
MyOql是我写的ORM,目前仅支持 MSSql2005+ ,从2009年到今天,已使用过不少项目,之后会写 其它关系数据库的解析器: MySql,Sqlite,Oracle 等. 代码地址(最新版) ...
- 我的ORM之二--添加
我的ORM索引 添加的语法: var 影响行数 = dbr.表.Insert(实体).Execute(); 实体类型 1. 任何C#类. 如:public class Entity{ public ...
- 我的ORM之三 -- 更新
我的ORM索引 更新语法 var 影响行数 = dbr.表.Update(实体).Where(条件).Execute(); 实体类型: 更新的实体类型和添加的实体类型一样,有三类: 1. 任何C#类. ...
- Django开发之ORM批量操作
版本 1 Python 3.8.2 2 Django 3.0.6 批量入库 场景: 前端页面通过 textarea 文本框提交一列多行数据到Django后台,后台通过ORM做入库操作 表名: Tabl ...
- 极验(Geetest) Laravel 5 集成开发包,让验证更安全
简述 在网站开发中使用频率最高的工具之一便是验证码,验证码在此也是多种多样,不过简单的图片验证码已经可以被机器识别,极验验证码提供了一个安全可靠的滑动验证码体系,让网站开发更加安全. 先感受一下这种验 ...
- Odoo12 重大改变
Table of Contents 重构的功能 ORM 数据导入 库存 库存规则 MRP 多步路线 新功能 IoT Odoo12 预计 2018/10 在 Odoo experience 20 ...
- FluentData-新型轻量级ORM 利用T4模板 批量生成多文件 实体和业务逻辑 代码
FluentData,它是一个轻量级框架,关注性能和易用性. 下载地址:FlunenData.Model 利用T4模板,[MultipleOutputHelper.ttinclude]批量生成多文件 ...
- Spring JDBC Framework详解——批量JDBC操作、ORM映射
转自:https://blog.csdn.net/yuyulover/article/details/5826948 一.spring JDBC 概述 Spring 提供了一个强有力的模板类JdbcT ...
随机推荐
- WinForm用户自定义控件,在主窗体加载时出现闪烁;调用用户控件出现闪烁,需要鼠标才能够显示
转载自:http://www.dotblogs.com.tw/rainmaker/archive/2012/02/22/69811.aspx 解决方案: 在调用用户控件的窗体里面添加一下代码: pro ...
- 理解soft-clipped reads
什么是soft-clipped reads 当基因组发生某一段的缺失,或转录组的剪接,在测序过程中,横跨缺失位点及剪接位点的reads回帖到基因组时,一条reads被切成两段,匹配到不同的区域,这样的 ...
- TCP、UDP、HTTP、SOCKET之间的区别
IP:网络层协议: TCP和UDP:传输层协议: HTTP:应用层协议: SOCKET:TCP/IP网络的API. TCP/IP代表传输控制协议/网际协议,指的是一系列协议. TCP和UDP使用IP协 ...
- RGB颜色中的参数是变量的时候,为什么要加上两个+号在左右?
<script> function draw(){ var c=document.getElementById("mycanvas"); var cxt=c.getCo ...
- Zepto 实现checkbox全选与全不选状态切换
最近项目里用到foundation,而foundation4默认集成了Zepto,很多轮子要重造,所以有了下面的代码. <script> /** * Muti-Checking-Toggl ...
- Qt 如何判断文件是不是一个目录
做个文件管理系统的时候碰到的question,下面来讲解下方法,因为在网上都没找到,就只能翻官方文档相关信息结果找到isFile(),isDir(); 因为是文件管理系统,那么肯定现先获取到它的路径以 ...
- 1996: [Hnoi2010]chorus 合唱队
链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1996 Description Input Output Sample Input 4 1701 ...
- 【洛谷·P2320】鬼谷子的钱袋
这道题很神奇 我们举一个例子,m=12 那么我们可以把它分成两部分,L和R: (1,2,,6)(7,8,,12) 我们可以发现R中的数都可以由12/2和左边的数组合得到 那么我们对L再分------ ...
- java 单利模式
首先何为单利模式: 单利模式即多次调用同一个对象的时候,只有一个实例(这里所谓的实例就是,假如创建了两个对象,它们的hashCode相同) 下面是相关代码: 1 创建一个对象Singleton类 pa ...
- Websocket Component
As of Camel 2.10, the Websocket component supports SSL/TLS configuration through the Camel JSSE Conf ...