【发布时间】:2016-02-19 02:47:53
【问题描述】:
我有一个像这样的 C# 数据结构:
public class Invoice
{
public string InvoiceNumber {get;set;}
public List<SalesPerson> SalesPersons {get;set;}
}
public class SalesPerson
{
public string Name {get;set;}
}
这对应于两个表:Invoice 和 SalesPerson。一张发票可以有任意数量的这些关联。
现在,我正在创建一个批量上传工具,接收一个 CSV 文件并创建一个发票集合(每个发票都有一些关联的 SalesPerson 记录)。
我可以用 Dapper 想一个简单的方法:遍历每个 Invoice,插入它,获取身份(一个整数 ID 列),遍历该发票中的每个 SalesPerson,使用我作为外国人获得的身份插入钥匙。但这似乎会给我的 SQL 服务器带来很多不必要的流量。
我知道“批量”插入可以多次执行插入命令,但我不知道在这种情况下会如何工作,因为我当时不知道外键'正在构造参数。
有没有比我上面概述的幼稚方式更好的插入方式? Dapper 是不是这个错误的工具? (我正在使用 SQL Server;如果有一些 tSQL 命令可以帮助我,我不知道)
【问题讨论】:
-
看看 marc_s 的回答——这取决于你的数据库,而不是 Dapper。
-
另一种方法是创建一个规范化表,其中包含 both 实体的列。将行作为批处理插入,然后从那里拆分到它们的目标表中。
标签: c# sql-server bulkinsert dapper