2010-04-16 5 views
1

ASP.NET 웹 사이트 (.NET 3.5)에 5 개의 테이블이있는 데이터 집합이 있다고 가정 해 봅시다. 각각 약 30,000 개의 행과 평균 12 개의 열이 있습니다. 데이터 집합의 모든 데이터를 SQL Server 2008의 5 가지 매우 유사한 테이블에 삽입하려고합니다. LINQ (개인 취향 - 새로운 것을 배우려는 시도)도 사용하고 싶습니다.LINQ를 사용하여 데이터 집합의 데이터를 SQL에 삽입

데이터 세트를 반복하는 것만 큼 간단하며 각 행에 대해 연결된 클래스의 새 인스턴스를 만들고 데이터 세트의 행으로 데이터를 초기화 한 다음 데이터 모델에 추가 한 다음에 거대한 SubmitChanges를 끝?

LINQ를 사용하여 더 좋은 방법이 있습니까? 아니면 이것이 사실상의 표준입니까?

+1

* Linq to SQL *을 의미합니까? –

+0

저는 주로 LINQ to SQL에 관심이 있지만 사람들이 LINQ를 데이터 집합을 참조하지 못하도록하고 싶지 않습니다. 모든 것이 끝나고 끝나면 필자는 경험이 많은 사람들이 데이터 집합, SQL 및 LINQ의 다양한 기능을 사용하여 작업 할 때 알 수있는 모범 사례 및/또는 배관 바로 가기를 찾고 있습니다. – Mayo

답변

2

개체를 만들고 삽입하는 것이 좋습니다. 그러나 마지막에 커다란 커밋을 피하기 위해 SubmitChanges()을 100 행마다 수행하려고 할 수 있습니다.

현금이있는 경우 Red Gate의 "SQL Data Compare"유틸리티 사본을 얻을 수 있습니다. 그렇다면 이러한 것들 중 하나를 다시 쓸 필요가 없습니다. :-)

편집 2010-04-19 : 트랜잭션을 사용하려는 경우 단일 SubmitChanges() 대신 내 방식을 사용해야한다고 생각합니다. 이 경우 L2S에서 자신의 거래를 명시 적으로 관리해야합니다 (http://msdn.microsoft.com/en-us/library/bb386995.aspx 참조). try/catch에서 쿼리를 실행하고 실패한 경우 트랜잭션을 롤백합니다. 조언

두 마지막 비트 :

  1. 이 ASP.NET 시간 제한이 충분히 높게 설정되어 있는지 확인합니다.
  2. 진행률 표시기를 인쇄 해보십시오. 그것은 이런 종류의 장기 실행 물건을 훨씬 더 맛있게 만듭니다.
+0

트랜잭션에 번들 된 모든 것을 원한다고 가정 할 때, 100 레코드마다 커밋을하거나 커밋을 커밋하는 것이 더 적절할까요? 아니면 이미 웹 애플 리케이션을 통해 많은 데이터를 가져 와서 "합리적인 솔루션"라인을 통과 시켰습니까? :) – Mayo

+0

댓글에서 너무 많이 말하기; 대신 대답을 편집하십시오. – roufamatic

2

Linq To SQL에는 기본적으로 SqlBulkCopy class과 같은 것이 없습니다. 빠른 검색을 수행했으며 implementation for Linq To Sql이있는 것 같습니다. 어떤 좋은 단서도 없지만 그것을 확인하는 것은 상처받을 수 없습니다.

1

DataContext.ExecuteCommand은 임의의 SQL 문과 함께 사용할 수 있습니다. "INSERT FROM"을 할 수 있습니다.

+0

흥미로운 아이디어 - 나는 오늘이 시간을 좀 보내려고 노력할 것이다. – Mayo

관련 문제