2016-10-01 55 views
1

我有嵌套的對象模型如下存儲過程來插入嵌套的對象:如何使用SQL

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

我想插入ProductProductOffering名單沿着具有OfferingPriceRegion在單個存儲過程再次名單(SPInsertProduct)使用C#。除了實體框架,最好的方法是什麼?因爲產品中的ProductOfferings數量可能會很多,例如400.實體框架可能需要更多時間來循環保存功能。請建議。

+1

沒有ORM可能是你最好的選擇是[表值參數](https://msdn.microsoft.com/en-us/library/bb675163(v = vs.110).aspx) – Steve

+0

@ red-swan如果您使用的是SQL Server 2016,JSON可能是一種選擇,儘管目前TVPs甚至XML是您的最佳選擇。 –

回答

4

Dapper是一個基於ADO.Net的對象映射器,最好的選擇將使用TableValuedParameters,其中完整的所需數據可以在一次調用中發送到數據庫。

以下是要點:

  • 小巧玲瓏採取TVP作爲DataTable
  • 對於IEnumerable<T>DataTable,您可以使用System.Data.DatasetExtensions方法CopyToDataTable或有一個的NuGet API FastMember來達到同樣的

很少注意事項:

列,列名和它們的順序應爲 TVPDataTable完全相同的
  • 號,要不然也不會工作,誤差不會提出這個問題,這個映射不是一樣Json的映射,其中架構不匹配ISN」 t問題

如果記錄數非常多,您可能需要分成多個DataTables並使用異步等待同時執行相同的操作。

+0

我正在運行.NET Core,它不包含DataSet/DataTable(我希望它永遠不會這樣,因爲它太糟糕了)。如果直接支持IEnumerable ,那會很好,但我不認爲有:(目前我卡住了。 –