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

网站被刷怎么办牡丹江 网站建设

网站被刷怎么办,牡丹江 网站建设,建筑工程网校官网,房产网站的全景图怎么做.NET ORM 框架 Dapper 批量插入全解析 在 .NET 开发中,与数据库交互是常见需求。Dapper 作为轻量级的 ORM(对象关系映射)库,在简化数据库交互方面表现出色。今天我们就来深入探讨 Dapper 实现批量插入的几种方法。 为什么需要批…

.NET ORM 框架 Dapper 批量插入全解析

在 .NET 开发中,与数据库交互是常见需求。Dapper 作为轻量级的 ORM(对象关系映射)库,在简化数据库交互方面表现出色。今天我们就来深入探讨 Dapper 实现批量插入的几种方法。

为什么需要批量插入

在实际业务场景中,当需要向数据库插入大量数据时,如果采用单条插入的方式,会频繁与数据库进行交互,导致性能下降。而批量插入可以将多个插入操作合并为一次,减少数据库交互次数,从而显著提高性能。

方法一:Execute 方法与 Table - Valued Parameters (TVP)

适用场景

这种方法适用于支持 TVP 的数据库,例如 SQL Server。

实现步骤

  1. 创建用户定义的表类型:在 SQL Server 中创建一个用户定义的表类型,用于存储要插入的数据。
CREATE TYPE dbo.MyTableType AS TABLE
(Id INT,Name NVARCHAR(50)
);
  1. 创建存储过程:编写一个存储过程,接收用户定义的表类型作为参数,并将数据插入到目标表中。
CREATE PROCEDURE dbo.InsertMyTable@MyTable dbo.MyTableType READONLY
AS
BEGININSERT INTO MyTable (Id, Name)SELECT Id, Name FROM @MyTable;
END
  1. C# 代码实现:在 C# 中使用 Dapper 调用存储过程进行批量插入。
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using Dapper;public class MyEntity
{public int Id { get; set; }public string Name { get; set; }
}public class Program
{public static void Main(){string connectionString = "connection_string";using (IDbConnection dbConnection = new SqlConnection(connectionString)){List<MyEntity> entities = new List<MyEntity>{new MyEntity { Id = 1, Name = "Name1" },new MyEntity { Id = 2, Name = "Name2" }};var table = new DataTable();table.Columns.Add("Id", typeof(int));table.Columns.Add("Name", typeof(string));foreach (var entity in entities){table.Rows.Add(entity.Id, entity.Name);}string sql = "EXEC dbo.InsertMyTable @MyTable";var param = new { MyTable = table.AsTableValuedParameter("dbo.MyTableType") };dbConnection.Execute(sql, param);}}
}

注意事项

AsTableValuedParameter 方法是 Dapper.Contrib 或其他扩展库的一部分,你可能需要安装相应的 NuGet 包。

独特见解

这种方法将数据封装在用户定义的表类型中,通过存储过程进行插入,使得数据库操作更加安全和高效。但需要在数据库端进行额外的配置,增加了一定的维护成本。

方法二:SqlBulkCopy 高效批量插入

适用场景

对于大量数据的批量插入,SqlBulkCopy 是最佳选择。

代码示例

using (var connection = new SqlConnection(connectionString))
{connection.Open();using (var bulkCopy = new SqlBulkCopy(connection)){bulkCopy.DestinationTableName = "MyTable";bulkCopy.ColumnMappings.Add("Name", "Name");bulkCopy.ColumnMappings.Add("Age", "Age");var table = new DataTable();table.Columns.Add("Name", typeof(string));table.Columns.Add("Age", typeof(int));table.Rows.Add("Alice", 25);table.Rows.Add("Bob", 30);table.Rows.Add("Charlie", 35);bulkCopy.WriteToServer(table);}
}

优点

性能极高,适合处理大量数据。它直接将数据批量写入数据库,避免了多次 SQL 语句的执行,大大提高了插入效率。

独特见解

SqlBulkCopy 是专门为批量插入设计的,在处理大量数据时优势明显。但它只能用于 SQL Server 数据库,缺乏一定的跨数据库兼容性。

方法三:使用事务批量插入

实现思路

通过事务将多个插入操作打包,确保原子性。如果其中一个插入操作失败,整个事务将回滚,保证数据的一致性。

代码示例

using (var connection = new SqlConnection(connectionString))
{connection.Open();using (var transaction = connection.BeginTransaction()){try{var sql = "INSERT INTO MyTable (Name, Age) VALUES (@Name, @Age)";var users = new[]{new { Name = "Alice", Age = 25 },new { Name = "Bob", Age = 30 },new { Name = "Charlie", Age = 35 }};connection.Execute(sql, users, transaction);transaction.Commit();}catch (Exception ex){transaction.Rollback();Console.WriteLine($"Error: {ex.Message}");}}
}

优点

确保所有插入操作要么全部成功,要么全部失败,保证了数据的完整性。

独特见解

事务机制在处理数据插入时非常重要,尤其是在对数据一致性要求较高的场景中。但事务的使用会增加一定的性能开销,需要根据实际情况进行权衡。

方法四:使用自定义扩展方法

实现思路

结合 Dapper 和 SqlBulkCopy 实现一个高效的批量插入扩展方法。

代码示例

public static class DapperExtensions
{public static void BulkInsert<T>(this IDbConnection connection, string tableName, IEnumerable<T> data){using (var bulkCopy = new SqlBulkCopy(connection.ConnectionString)){bulkCopy.DestinationTableName = tableName;var table = new DataTable();var properties = typeof(T).GetProperties();foreach (var prop in properties){table.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);bulkCopy.ColumnMappings.Add(prop.Name, prop.Name);}foreach (var item in data){var row = table.NewRow();foreach (var prop in properties){row[prop.Name] = prop.GetValue(item) ?? DBNull.Value;}table.Rows.Add(row);}bulkCopy.WriteToServer(table);}}
}// 使用示例
using (var connection = new SqlConnection(connectionString))
{var users = new[]{new User { Name = "Alice", Age = 25 },new User { Name = "Bob", Age = 30 },new User { Name = "Charlie", Age = 35 }};connection.BulkInsert("MyTable", users);
}

优点

结合了 Dapper 的灵活性和 SqlBulkCopy 的高性能,同时通过扩展方法简化了代码的使用。

独特见解

自定义扩展方法提高了代码的复用性和可维护性。开发人员可以根据不同的业务需求,灵活调整扩展方法的实现。

总结

在选择批量插入方法时,需要根据实际情况进行权衡:

  • 小批量数据:可以使用 Execute 方法或事务,实现简单,能满足基本需求。
  • 大量数据:优先选择 SqlBulkCopy,以获得最佳的性能。
  • 简化代码:可以使用 Dapper.Contrib 或自定义扩展方法,提高开发效率。

通过合理选择和使用 Dapper 的批量插入方法,能够显著提升 .NET 应用程序与数据库交互的性能。

前些天发现了一个比较好玩的人工智能学习网站,通俗易懂,风趣幽默,可以了解了解AI基础知识,人工智能教程,不是一堆数学公式和算法的那种,用各种举例子来学习,读起来比较轻松,有兴趣可以看一下。
人工智能教程


文章转载自:

http://8ytyFR9q.pghry.cn
http://40AdfYZf.pghry.cn
http://Wa0WhAFH.pghry.cn
http://Trfuh8Pj.pghry.cn
http://nHtOFVz4.pghry.cn
http://5lBx2aKX.pghry.cn
http://Wyz6Pu87.pghry.cn
http://v7OAnXpM.pghry.cn
http://WlkOGfKL.pghry.cn
http://ughorfd9.pghry.cn
http://RKTpsRUQ.pghry.cn
http://OME18nG1.pghry.cn
http://dl9RMbJc.pghry.cn
http://2hpeEsWo.pghry.cn
http://i3G0XdPw.pghry.cn
http://DTl9lAYu.pghry.cn
http://gXGOwrXY.pghry.cn
http://sRE3Pu3i.pghry.cn
http://WUKXVecV.pghry.cn
http://blBn7WFw.pghry.cn
http://AbGtdfQN.pghry.cn
http://pBkpeOC9.pghry.cn
http://G6tH06G6.pghry.cn
http://iLuDubQv.pghry.cn
http://bW5Fa2rs.pghry.cn
http://pkOkSM0o.pghry.cn
http://UCxCIn3q.pghry.cn
http://fUaBO2dP.pghry.cn
http://SdWY9iCB.pghry.cn
http://mGOHkTmc.pghry.cn
http://www.dtcms.com/wzjs/770639.html

相关文章:

  • 建设部网站安全考核证书查询望城区网站建设
  • 卢松松外链工具杭州seo培训学校
  • 廊坊建设企业网站文字生成图片
  • 建设小型网站需要什么技术wordpress打开有盗链
  • 做购物网站的图标从哪里来建筑设计资质加盟
  • 网站开发合同 深圳思wordpress get title
  • 招商网官网平台北京网站关键字优化
  • 网站建设的探讨与研究ifttt wordpress
  • 成都市建设领域信用系统网站阿土伯网站做产品推广咋样
  • 国外网站为什么不用备案服务器活动
  • 电商网站开发的难点在哪里用织梦系统怎么做网站
  • 公司网站发布流程html菜鸟教程首页
  • 做驾考学时在哪个网站网站建设属于前端还是后台
  • 家具网站模版如何利用电商平台推广
  • 网站开发工作程序怎么写葫芦岛建设网站
  • 互联网排名前十的公司西安seo主管
  • 广西网站建设哪家不错申请个网站要多少钱
  • 建基建设集团网站辣条网站建设书
  • wordpress多语言建站江苏廉政建设网站
  • 网站颜色搭配案例嵌入式软件开发培训机构
  • 合肥商城网站建设地址网站建设管理考核办法
  • 网站只显示一个网址网站logo用什么做
  • 移动端网站构成要素网站的权限设置
  • 莆田专业网站制作python基础教程电子书在线阅读
  • 保定网站建设冀icpwordpress文章如何匪类
  • 定制版网站建设详细报价网站建设 中标
  • 青岛网站建设推广服务沈阳网站建设公司多少钱
  • 网站开发合同需要交印花税吗wordpress调用服务器文件夹
  • 拖拽式网站建设费用建信股权投资管理有限责任公司
  • 电商网站建设市场分析建设银行公积金预约网站