我的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之六-- 批量的更多相关文章

  1. Django orm 实现批量插入数据

    Django ORM 中的批量操作 在Hibenate中,通过批量提交SQL操作,部分地实现了数据库的批量操作.但在Django的ORM中的批量操作却要完美得多,真是一个惊喜. 数据模型定义 首先,定 ...

  2. 我的ORM汇总

    MyOql是我写的ORM,目前仅支持 MSSql2005+ ,从2009年到今天,已使用过不少项目,之后会写 其它关系数据库的解析器: MySql,Sqlite,Oracle 等. 代码地址(最新版) ...

  3. 我的ORM之二--添加

    我的ORM索引 添加的语法: var 影响行数 = dbr.表.Insert(实体).Execute(); 实体类型 1. 任何C#类. 如:public class Entity{   public ...

  4. 我的ORM之三 -- 更新

    我的ORM索引 更新语法 var 影响行数 = dbr.表.Update(实体).Where(条件).Execute(); 实体类型: 更新的实体类型和添加的实体类型一样,有三类: 1. 任何C#类. ...

  5. Django开发之ORM批量操作

    版本 1 Python 3.8.2 2 Django 3.0.6 批量入库 场景: 前端页面通过 textarea 文本框提交一列多行数据到Django后台,后台通过ORM做入库操作 表名: Tabl ...

  6. 极验(Geetest) Laravel 5 集成开发包,让验证更安全

    简述 在网站开发中使用频率最高的工具之一便是验证码,验证码在此也是多种多样,不过简单的图片验证码已经可以被机器识别,极验验证码提供了一个安全可靠的滑动验证码体系,让网站开发更加安全. 先感受一下这种验 ...

  7. Odoo12 重大改变

    Table of Contents 重构的功能 ORM 数据导入 库存 库存规则 MRP 多步路线 新功能 IoT     Odoo12 预计 2018/10 在 Odoo experience 20 ...

  8. FluentData-新型轻量级ORM 利用T4模板 批量生成多文件 实体和业务逻辑 代码

    FluentData,它是一个轻量级框架,关注性能和易用性. 下载地址:FlunenData.Model 利用T4模板,[MultipleOutputHelper.ttinclude]批量生成多文件 ...

  9. Spring JDBC Framework详解——批量JDBC操作、ORM映射

    转自:https://blog.csdn.net/yuyulover/article/details/5826948 一.spring JDBC 概述 Spring 提供了一个强有力的模板类JdbcT ...

随机推荐

  1. CyclicBarrier在多线程同步运行后相互访问的问题。

    CyclicBarrier的介绍 一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point).在涉及一组固定大小的线程的程序中,这些线程必须不时地互相 ...

  2. 【CodeVS1080】线段树练习

    Description 一行N个方格,开始每个格子里都有一个整数.现在动态地提出一些问题和修改:提问的形式是求某一个特定的子区间[a,b]中所有元素的和:修改的规则是指定某一个格子x,加上或者减去一个 ...

  3. HTML5之语义标签

    在HTML5标准中,新加了几个用于增添页面语义的标签,这些标签有:article.section.nav和aside等.与别的大多数标签不 同,浏览器在解释渲染这些标签的时候仅仅把它作为普通的div块 ...

  4. 关于String中+与StringBuilder的问题

      字符串连接可以通过两种方法实现,其中一种是在Java中提供的一个StringBuilder类(这个类只在J2SE5及以上版本提供,以前的版本使用StringBuffer类). 字符串是Java程序 ...

  5. DBNull 与 求和方法

    public int CountMoney() { if (!DBNull.Value.Equals(Eval("LawyerMoney")) && !DBNull ...

  6. 给自己立下一个巨大的flag

    [BZOJ1861][BZOJ3224] [BZOJ2733][BZOJ1056] [BZOJ2120][BZOJ3673] [BZOJ1833][BZOJ1026] [BZOJ3209][BZOJ1 ...

  7. Qt 5.7设置调试器

    mingw版本下自带的,这个我就不在赘述. 现在来说一下msvc版本下调试器,cdb,这个需要到ms去下载. thunder://QUFodHRwOi8vZG93bmxvYWQubWljcm9zb2Z ...

  8. SAS 画折线图PROC GPLOT

    虽然最后做成PPT里的图表会被要求用EXCEL画,但当我们只是在分析的过程中,想看看数据的走势,直接在SAS里画会比EXCEL画便捷的多. 修改起来也会更加的简单,,不用不断的修改程序然后刷新EXCE ...

  9. Bootstrap 栅格系统

    1.简介 Bootstrap内置了一套响应式.移动设备优先的流式栅格系统,随着屏幕设备或视口(viewport)尺寸的增加,系统会自动分为最多12列.它包含了易于使用的预定义classe,还有强大的m ...

  10. java内存泄漏

    java内存泄漏主要分成两个方面: (1)堆中申请的空间没有被释放 (2)对象已不在被使用,但是仍然存在在内存当中 以下集中情况可能会导致内存泄漏 (1)静态集合的使用hashmap和vector,静 ...