当前位置: 首页 > news >正文

东莞做营销型网站站长资源平台

东莞做营销型网站,站长资源平台,网站开发常用软件是什么,工作室建设基础系列文章目录 🎀🎀🎀 .NET开源 ORM 框架 SqlSugar 系列 🎀🎀🎀 文章目录 系列文章目录一、前言 🍃二、插入方式 💯2.1 单条插入实体2.2 批量 插入实体2.3 根据字典插入2.4 根据 Dat…

系列文章目录

🎀🎀🎀 .NET开源 ORM 框架 SqlSugar 系列 🎀🎀🎀


文章目录

  • 系列文章目录
  • 一、前言 🍃
  • 二、插入方式 💯
    • 2.1 单条插入实体
    • 2.2 批量 插入实体
    • 2.3 根据字典插入
    • 2.4 根据 Datatable 插入
    • 2.5 匿名、Object、接口、抽象类插入
    • 2.6 插入返回值
  • 三、功能案例
    • 3.1 不插入指定字段
    • 3.2 只插入指定字段
    • 3.3 NULL列不插入 💯
    • 3.4 异步执行
    • 3.5 级联、导航插入
    • 3.6 大数据插入
    • 3.7 插入默认值
    • 3.8 Guid主键自动赋值
    • 3.9 调用实体内方法
    • 3.10 雪花ID
    • 3.11 强制插入自增列
    • 3.12 Into Select
    • 3.13 分页插入
  • 四、总结
  • 🎀🎀🎀 .NET开源 ORM 框架 SqlSugar 系列 🎀🎀🎀


一、前言 🍃

前面的章节介绍了各种 SqlSugar 各种场景的 查询 操作,接下来将介绍 SqlSugar 增、删、改 相关操作。数据库 插入 数据的方法包括:使用 SQL 插入语句、通过 ORM 框架、使用 批量插入 技术、利用 存储过程

二、插入方式 💯

2.1 单条插入实体

单条插入实体是最常见也是最基本的用法,以下罗列了一些单条实体插入的示例。

  • 🔢返回插入行数
  • 🛗插入返回自增列 (实体除 ORACLE 外实体要配置自增,Oracle 需要配置序列)
  • ❄️返回雪花ID
  • 🧭导航插入
  • ⏱️获取数据库时间
  • 🎯强制设置表名

🌰 具体 demo 如下:

//返回插入行数
db.Insertable(insertObj).ExecuteCommand(); //都是参数化实现
//异步: await db.Insertable(insertObj).ExecuteCommandAsync()//插入返回自增列 (实体除ORACLE外实体要配置自增,Oracle需要配置序列)
db.Insertable(insertObj).ExecuteReturnIdentity();
//异步: await db.Insertable(insertObj).ExecuteReturnIdentityAsync();//返回雪花ID
long id= db.Insertable(实体).ExecuteReturnSnowflakeId();//导航插入
//具体文档:https://www.donet5.com/Home/Doc?typeId=2430//实用技巧1:获取数据库时间我们可以用   
var dbTime = db.GetDate();
//实用技巧2: 强制设置表名(默认表名来自实体) 
db.Insertable(insertObj).AS("table01").ExecuteCommand();//更多返回值方法看 1.6

2.2 批量 插入实体

批量插入主要有如下四种方式🆚:

  1. 非参数化插入(防注入)

    • ✅优点:综合性能比较平均,列少1万条也不慢,属于万金油写法,不加事务情况下部分库有失败回滚机质。
    • 🚫缺点:数据量超过5万以上占用内存会比较大些,内存小可以用下面2种方式处理。
  2. 参数化内部分页插入(底层是分页插入)

    • ✅优点:适合插入条数固定,并且条数较少,请求频繁高的功能(最大利用执行计划缓存)。
    • 🚫缺点:个别库500以上就开始慢了,要加事务才能回滚。
  3. 大数据写入(特色功能:大数据处理上比所有框架都要快30%)

    • ✅优点:1000条以上性能无敌手。
    • 🚫缺点:不支持数据库默认值, API功能简单, 小数据量并发执行不如普通插入,插入数据越大越适合用这个。
  4. Into Select ,从一个表导入到另一个表

    • ✅优点:性能好。
    • 🚫缺点:数据必须在数据库已存在,才能这样插入到新表。
//(1)、非参数化插入(防注入) 
//优点:综合性能比较平均,列少1万条也不慢,属于万金油写法,不加事务情况下部分库有失败回滚机质
//缺点:数据量超过5万以上占用内存会比较大些,内存小可以用下面2种方式处理
db.Insertable(List<实体>).ExecuteCommand()  
db.Insertable(List<实体>).PageSize(1000).ExecuteCommand() //新功能:分页插入 5.1.4.103+
//错误: db.Insertable<List<实体>>(List).ExecuteCommand()//<>里面不能是list
//正确: Insertable<实体>(List).ExecuteCommand() 
//正确: Insertable(List).ExecuteCommand() //(2)、参数化内部分页插入(底层是分页插入)
//优点:适合插入条数固定,并且条数较少,请求频繁高的功能(最大利用执行计划缓存)
//缺点:个别库500以上就开始慢了,要加事务才能回滚  
db.Insertable(List<实体>).UseParameter().ExecuteCommand()//5.0.3.8及以上 //(3)、大数据写入(特色功能:大数据处理上比所有框架都要快30%)
//优点:1000条以上性能无敌手
//缺点:不支持数据库默认值, API功能简单, 小数据量并发执行不如普通插入,插入数据越大越适合用这个
//新功能 5.0.44
db.Fastest<实体>().PageSize(100000).BulkCopy(List<实体>);//MySql连接字符串要加AllowLoadLocalInfile=true
//详细文档:https://www.donet5.com/Home/Doc?typeId=2404//(4)、Into Select ,从一个表导入到另一个表 
//优点:性能好
//缺点:数据必须在数据库已存在,才能这样插入到新表//例1:不同实体插入  
db.Queryable<Order>()//.IgnoreColumns(it=>it.Id) 如果是自增可以忽略,不过ID就不一样了   .Select(it=>new { name=it.name,......})            .IntoTable<实体2>();//例2: 同实体不同表插入    
db.Queryable<Order>()//.IgnoreColumns(it=>it.Id) 如果是自增可以忽略,不过ID就不一样了
.IntoTable<Order>("新表名");

2.3 根据字典插入


//可以是 Dictionary 或者 List<Dictionary >
var dc= new Dictionary<string, object>();dc.Add("name", "1");dc.Add("CreateTime", DateTime.Now);
db.Insertable(dc).AS("student").ExecuteCommand();

2.4 根据 Datatable 插入

//方案1
List<Dictionary<string,object>> dc= db.Utilities.DataTableToDictionaryList(dataTable);//5.0.23版本支持
db.Insertable(dc).AS("student").ExecuteReturnIdentity();//注意:5.0.7.7 以下存在BUG
//方案2 :直接用datatable插入
db.Fastest<System.Data.DataTable>().AS("order").BulkCopy(dataTable);
//具体用法 要看文档  https://www.donet5.com/Home/Doc?typeId=2404

2.5 匿名、Object、接口、抽象类插入

//1.匿名对象插入(最新)
db.InsertableByDynamic(new   { name="",price=1 }).AS("[Order]").ExecuteCommand();//2.Object、接口、抽象类插入
//o必须是真实的类对象 (比如根据type反射出来的对象,或者转成了Object的实体)db.InsertableByObject(o).ExecuteCommand();//3.更多功能 :动态建类等
https://www.donet5.com/Home/Doc?typeId=2562

2.6 插入返回值

在这里插入图片描述

三、功能案例

3.1 不插入指定字段

//忽略 name testid
db.Insertable(insertObj).IgnoreColumns(it => new { it.Name, it.TestId }).ExecuteReturnIdentity();
db.Insertable(insertObj).IgnoreColumns( "Name","TestId").ExecuteReturnIdentity();

3.2 只插入指定字段

//只插入 name schoolid 
db.Insertable(insertObj).InsertColumns(it => new { it.Name, it.SchoolId }).ExecuteReturnIdentity();
db.Insertable(insertObj).InsertColumns("Name","SchoolId").ExecuteReturnIdentity();

3.3 NULL列不插入 💯

注意:因为插入的列不同不支持批量操作,如果有需要可以自已循环操作

db.Insertable(insertObj2).IgnoreColumns(ignoreNullColumn:true).ExecuteCommand();

3.4 异步执行

await Db.Insertable(new Order() { Name = "a", CustomId = 1 }).ExecuteCommandAsync();

3.5 级联、导航插入

db.InsertNav(list).Include(z1 => z1.SchoolA)// 插入第一层 SchoolA.ThenInclude(z1 => z1.RoomList) //插入 SchoolA 下面的 RoomList.Include(z1 => z1.Books)//插入第一层  Books.ExecuteCommand();

3.6 大数据插入


//插入 100万 数秒时间
db.Fastest<RealmAuctionDatum>().BulkCopy(GetList());//性能 比现有任何Bulkcopy都要快30%
db.Fastest<RealmAuctionDatum>().PageSize(50000).BulkCopy(List<实体>);//大数据分页插
//如果不支持可以用:普通分页插入 
db.Insertable(List<实体>).PageSize(1000).ExecuteCommand();//普通分页插入

3.7 插入默认值

方式1: 如果数据库存在默认值用这个方法

public class Order
{[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]public int Id { get; set; }public string Name { get; set; }public decimal Price { get; set; }[SugarColumn(IsOnlyIgnoreInsert =true)]//设置后插入会取数据库默认值public DateTime CreateTime { get; set; }
}

方式2:通过特性指定默认值

  //InsertServerTime=true 插入取数据库当前时间 支持多库 //IsOnlyIgnoreUpdate=true 是指在Update操作不更新该列 (可用可不用根据需求来)[SugarColumn(InsertServerTime =true, IsOnlyIgnoreUpdate =true)]// getdate() now() sysdatepublic DateTime CreateTime { get; set; }//插入根据SQL进行插入 [SugarColumn(InsertSql  = "getdate()")] //生成   getdate()public DateTime CreateTime2 { get; set; }[SugarColumn(InsertSql  = "''")] // 生成  ''public string  Str { get; set; }[SugarColumn(InsertSql  = "0")]// 生成  0public string  Str { get; set; }

方式3: 通过AOP实现,会有单独篇幅介绍

3.8 Guid主键自动赋值

只要设置为主键,并且 C# 类型是 Guid 只要不传值,会自动赋值。

🎯注意: 只能用ExecuteCommand 方法不能用自增列的方法

3.9 调用实体内方法

 var data=new  UnitInsertMethod(){ Name="a",Time=DateTime.Now};db.Insertable(data).ExecuteCommand();db.Updateable(data).CallEntityMethod(it => it.modify("admint")).ExecuteCommand();//实体public class UnitInsertMethod{[SqlSugar.SugarColumn(IsPrimaryKey = true, IsIdentity = true)]public int Id { get; set; }public string Name { get; set; }public DateTime Time { get; set; }[SqlSugar.SugarColumn(IsNullable =true)]public string UserId { get; set; }public void Create(){this.Time = DateTime.Now;this.UserId = "1";}public void modify(string a){this.Time = DateTime.Now;this.UserId = a;}} 

3.10 雪花ID

详情请移步:SqlSugar雪花ID常见问题

3.11 强制插入自增列

🎯需要数据库的支持才行,ORM 只是把 SQL 中的 自增列 加上去了,有些需要写脚本。

//请升级到:5.1.4.73-preview12
db.Insertable(insertObj).OffIdentity().ExecuteCommand() //老版本:SqlServer支持不友好
//db.Insertable(insertObj).IgnoreColumns(false,true).ExecuteCommand()

3.12 Into Select

//例1:不同实体插入 Select Into
db.Queryable<Order>()//.IgnoreColumns(it=>it.Id) 如果是自增可以忽略,不过ID就不一样了   .Select(it=>new { name=it.name,......})            .IntoTable<实体2>();//例2: 同实体不同表插入    
db.Queryable<Order>()//.IgnoreColumns(it=>it.Id) 如果是自增可以忽略,不过ID就不一样了
.IntoTable<Order>("新表名");

3.13 分页插入

可以用分页插入慢慢处理

db.Insertable(List<实体>).PageSize(1000).ExecuteCommand();//普通分页
db.Fastest<RealmAuctionDatum>().PageSize(100000).BulkCopy(GetList());//大数据分页

四、总结

以上介绍了 SqlSugar 的各种插入操作,除此之外还有 无实体插入、导航插入、AOP插入等等。


🎀🎀🎀 .NET开源 ORM 框架 SqlSugar 系列 🎀🎀🎀

【开篇】.NET开源 ORM 框架 SqlSugar 系列
【入门必看】.NET开源 ORM 框架 SqlSugar 系列
【实体配置】.NET开源 ORM 框架 SqlSugar 系列
【Db First】.NET开源 ORM 框架 SqlSugar 系列
【Code First】.NET开源 ORM 框架 SqlSugar 系列
【数据事务】.NET开源 ORM 框架 SqlSugar 系列
【连接池】.NET开源 ORM 框架 SqlSugar 系列
【查询目录】.NET开源 ORM 框架 SqlSugar 系列
【查询基础】.NET开源 ORM 框架 SqlSugar 系列
【排序用法】.NET开源 ORM 框架 SqlSugar 系列
【分组去重】.NET开源 ORM 框架 SqlSugar 系列
【联表查询】.NET开源 ORM 框架 SqlSugar 系列
【导航查询】.NET开源 ORM 框架 SqlSugar 系列
【子查询】.NET开源 ORM 框架 SqlSugar 系列
【嵌套查询】.NET开源 ORM 框架 SqlSugar 系列
【配置查询】.NET开源 ORM 框架 SqlSugar 系列
【并集查询】.NET开源 ORM 框架 SqlSugar 系列
【树型查询】.NET开源 ORM 框架 SqlSugar 系列
【表格查询】.NET开源 ORM 框架 SqlSugar 系列
【动态表达式】.NET开源 ORM 框架 SqlSugar 系列
【查询函数】.NET开源ORM框架 SqlSugar 系列
【过滤器】.NET开源 ORM 框架 SqlSugar 系列
【跨库查询、多库查询】.NET开源 ORM 框架
​【报表查询】.NET开源ORM框架 SqlSugar 系列
【Where语法全解密】.NET开源ORM框架 SqlSugar 系列
【Select 语法全解密】.NET开源ORM框架 SqlSugar 系列

在这里插入图片描述

http://www.shuangfujiaoyu.com/news/18532.html

相关文章:

  • 秦皇岛手机网站制作公司100%上热门文案
  • 网站备案后 还是需要再备案吗免费无代码开发平台
  • 阿里云虚拟主机多网站吗整合营销理论主要是指
  • 如何介绍设计的网站模板下载地址搜狗seo查询
  • 网站建设与运行的盈利收入一份完整app运营推广方案
  • 眼科医院网站开发seo技巧
  • 晋城做网站公司长春网站建设团队
  • 网站设计云匠网网上推广赚钱方法
  • 永州网站建设多少钱品牌传播策略
  • 定制网站本地企业微信指数查询
  • 国内好点的wordpress主题陕西seo主管
  • 做股东变更要上哪个网站seo引擎搜索网站关键词
  • 制作一个专门浏览图片的网站百度竞价开户哪家好
  • .net建设网站步骤详解广州网站优化软件
  • 做盗版影视网站违法吗最好的网站优化公司
  • 上海做网站站优云一一十七windows优化大师怎么卸载
  • 哪些网站可以做淘宝基础销量新闻摘抄2022最新5篇
  • 建设独立商城网站游戏推广渠道有哪些
  • 网站建设操作企业文化宣传策划方案
  • 无锡做网站服务海外推广专员
  • 网站建设排名北京seo关键词优化收费
  • 外贸怎么做网站外链英语seo什么意思
  • 湖北可以做网站方案的公司成都排名推广
  • 手机网站设计企业朋友圈网络营销
  • 大良网站制作公司广州seo怎么做
  • 独立网站运营怎么给产品做网络推广
  • 郑州美容网站建设百度热点排行榜
  • vip影视网站如何做appwindows优化大师最新版本
  • 晋中做网站的公司南京网站设计优化公司
  • 魏县住房和城乡建设局网站营销型网站一般有哪些内容