SQL에서 저장 프로 시저를 사용하여 중첩 된 개체를 삽입하는 방법

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

문제

나는 중첩 된 객체 모델을 다음과 같이 가지고있다 :

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

나는 OfferingPriceRegion 목록을 C #을 사용하는 단일 저장 프로 시저 ( SPInsertProduct )에 다시 갖는 ProductOffering 목록과 함께 Product 를 삽입하려고합니다. 엔티티 프레임 워크를 제외한 최선의 접근 방법은 무엇입니까? 왜냐하면 Product의 ProductOfferings은 400이라는 말 수가 많을 수 있기 때문입니다. 엔티티 프레임 워크는 반복 저장 기능에서 더 많은 시간이 걸릴 수 있습니다. 제발 제안 해주세요.

수락 된 답변

DapperADO.Net 기반 개체 매퍼이므로 가장 필요한 옵션은 TableValuedParameters 사용하는 TableValuedParameters . 여기서 필요한 전체 데이터는 단일 호출로 데이터베이스로 보낼 수 있습니다.

다음은 중요한 사항입니다.

  • Dapper는 TVP를 DataTable
  • IEnumerable<T> to DataTable 경우 System.Data.DatasetExtensions 메서드 CopyToDataTable 하거나 Nuget API FastMember 를 사용하여 동일한 결과 를 얻을 수 있습니다.

몇 가지주의 사항 :

  • 열 수, 열 이름 및 순서는 TVPDataTable 대해 정확히 동일해야합니다. 그렇지 않으면 작동하지 않으며 오류로 인해 문제가 제안되지 않습니다.이 매핑은 스키마 불일치가 문제가되지 않는 Json 매핑과 동일하지 않습니다.

레코드 수가 매우 많으면 여러 개의 DataTables 로 나누고 Async-Await을 사용하여 동일한 작업을 동시에 수행 할 수 있습니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.