如何在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。其中实体框架可能在循环保存功能方面花费更多时间。请提出建议。

如何在sql中使用存储过程插入嵌套对象

Dapper是一个基于ADO.Net的对象映射器,最好的选择是使用TableValuedParameters,其中完整的所需数据可以在一次调用中发送到数据库。

以下是要点:

  • Dapper将TVP作为DataTable
  • 对于IEnumerable<T>DataTable,您可以使用System.Data.DatasetExtensions方法CopyToDataTable,或者有一个Nuget API FastMember来实现相同的

少数注意事项:

  • TVPDataTable的列数、列名及其顺序应完全相同,否则它将不起作用,错误也不会表明问题,此映射与Json映射不同,Json映射中架构不匹配不是问题

如果记录的数量非常多,则可能需要将其划分为多个DataTables,并使用Async Await同时执行相同的操作。