2011-08-28 3 views
1

내 시나리오가 조금 이상합니다. 엔티티 목록이 있습니다. 목록에있는 10 개의 항목이 서로 연결된 세 개의 다른 표로 이동한다고 가정 해 보겠습니다. Linq 2 Sql 사용하고 여러 번 반복 대신 단일 적중에 삽입해야합니다.일괄 처리 또는 대량 삽입을 Linq 2 Sql?

가능합니다. BLtoolkit에는 대량 삽입을 수행하는 InsertBatch() 메서드가 있다고 들었습니다. L2S와 비슷한 모든 것.

+0

Linq-to-SQL은 배치 작업을 위해 ** indended되지 않습니다 **. 대량 삽입의 경우 [SqlBulkCopy 클래스] (http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx)를 사용하십시오. 작업에 훨씬 적합합니다. –

답변

1

간단히 말해서, 불가능합니다.

InsertAllOnSubmit은 기본적으로 매번 InsertOnSubmit을 호출하기 만합니다. 그래서 그것은 많은 도움이되지 않습니다.

생성 된 SQL을 프로파일하면 많은 개별적인 삽입 문이 발생하여 많은 오버 헤드가 발생하게됩니다. insertOnSumbit 또는 InsertAllOnSumbit 사용에 관계없이

Google을 사용하면 Linq-2-sql에 SqlBulkCopy 동작을 추가하려는 몇 가지 시도가 표시됩니다. 예를 들면 다음과 같습니다. http://blogs.microsoft.co.il/blogs/aviwortzel/archive/2008/05/06/implementing-sqlbulkcopy-in-linq-to-sql.aspx

그러나 일괄 처리 작업을 위해 SqlBulkCopy를 직접 구현하는 것이 좋습니다.

+1

실제 데이터베이스 상호 작용은 실제로 SubmitChanges에서 발생합니다. InsertOnSubmit 및 InsertAllOnSubmit은 제출이 발생할 때 작업 단위 변경을 대기열에 그냥 대기시킵니다. 그러나 우리가 데이터베이스와 상호 작용할 때 각 요청은 데이터베이스로 개별적으로 전송됩니다 (레코드 단위로 트랜잭션 롤백을 허용하기 위해). 대량 삽입을위한 더 나은 옵션으로 SqlBulkCopy/SSIS/Ado.Net TableParameters (http://msdn.microsoft.com/en-us/library/bb675163.aspx)에 동의했습니다. –

+0

좋은 추가 - 당신이 책을 썼기 때문에 나는 다른 것을 기대하지 않을 것입니다 :) – Pleun

2

InsertAllOnSubmit입니다. Linq To SQL을 사용하면 업데이트를 위해 변경하려는 속성 만 설정하면됩니다. 그럼 SubmitChanges 전화하면 나머지는 당신을 위해 할 것입니다 ..

+0

작동합니까? 여러 테이블 또는 단 하나 ??? –

+0

모든 테이블에 대해 하나의 컨텍스트를 통해 모두 처리됩니다. 그냥 시도해라. –

+1

InsertAllOnSubmit는 기본적으로 매번 InsertOnSubmit을 호출한다. 일괄 삽입을하지 마십시오. – Pleun