Cómo insertar un objeto anidado utilizando el procedimiento almacenado en sql

ado.net asp.net-mvc c# dapper sql-server-2014

Pregunta

Estoy teniendo el modelo de objetos anidados de la siguiente manera:

      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; }
        }

Quiero insertar Product junto con la lista de ProductOffering que tiene otra vez la lista de OfferingPriceRegion en un solo procedimiento almacenado ( SPInsertProduct ) usando C #. cuál es el mejor enfoque, excepto el marco de la entidad. porque los ProductOfferings en Product pueden estar en un gran número en conteo, por ejemplo, 400. Donde el marco de entidad puede tomar más tiempo en la funcionalidad de salvar en bucle. Por favor recomiende.

Respuesta aceptada

Dapper que Dapper es un mapeador de objetos basado en ADO.Net , la mejor opción sería usar TableValuedParameters , donde los datos requeridos completos pueden enviarse a la base de datos en una sola llamada.

Los siguientes son los puntos importantes:

  • Dapper toma el TVP como una DataTable
  • Para IEnumerable<T> a DataTable , puede usar el método System.Data.DatasetExtensions CopyToDataTable o hay un FastMember API de Nuget para lograr el mismo

Pocas advertencias:

  • El número de columnas, los nombres de las columnas y su orden serán exactamente los mismos para TVP y DataTable , de lo contrario no funcionará y el error no sugerirá el problema, esta asignación no es la misma que la de Json donde la falta de correspondencia del esquema no es un problema

Si el número de registros es muy alto, es posible que desee dividirlo en varias DataTables y utilizar Async-Await para realizar la misma operación al mismo tiempo.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué