如何在sql中使用存储过程插入嵌套对象
本文关键字:存储过程 插入 嵌套 对象 sql | 更新日期: 2023-09-27 18:09:43
我有如下嵌套对象模型:
public class Product
{
public List<ProductOffering> ProductOfferings { get; set; }
}
public class ProductOffering
{
public int OfferingId { get; set; }
public string OfferingDescription { get; set; }
public string OfferingType { get; set; }
public List<OfferingPriceRegion> PriceRegions { get; set; }
}
我想使用C#在单个存储过程(SPInsertProduct
(中插入Product
和具有OfferingPriceRegion
的列表的ProductOffering
的列表。除了实体框架之外,什么是最好的方法。因为Product中的Productions Offerings可能在计数上是大量的,比如400。其中实体框架可能在循环保存功能方面花费更多时间。请提出建议。
Dapper
是一个基于ADO.Net
的对象映射器,最好的选择是使用TableValuedParameters
,其中完整的所需数据可以在一次调用中发送到数据库。
以下是要点:
- Dapper将TVP作为
DataTable
- 对于
IEnumerable<T>
到DataTable
,您可以使用System.Data.DatasetExtensions
方法CopyToDataTable
,或者有一个Nuget API FastMember来实现相同的
少数注意事项:
TVP
和DataTable
的列数、列名及其顺序应完全相同,否则它将不起作用,错误也不会表明问题,此映射与Json映射不同,Json映射中架构不匹配不是问题
如果记录的数量非常多,则可能需要将其划分为多个DataTables
,并使用Async Await同时执行相同的操作。