1

수천 개의 행이있는 SQL 테이블이 있으며 해당 스키마는 EF 마이그레이션에 의해 관리됩니다.EF 마이그레이션에서 많은 양의 데이터 업데이트

해당 테이블에 연결된 열거 형의 값을 변경하려고하므로 DB의 모든 값을 새 값으로 업데이트해야합니다. 아래와 같은 것.

this.Sql("UPDATE MyTable SET MyEnum=0 WHERE MyEnum=-1"); 

이 작은 테이블에 모든 좋은 것 때문이 아니라 테이블의 크기는 (내가 연결 시간 제한, tempdb의 공간 문제를 얻을 수 한 번에 그런 큰 업데이트를 실행하기 정말 적절한 트랜잭션 공간을 기록하지 문제 요법). 일괄 처리하는 것이 훨씬 더 바람직합니다. 예 :

while(ctx.MyTable.Any(m =>m.MyEnum == -1)) 
{ 
    this.Sql("UPDATE TOP (1000000) MyTable SET MyEnum=0 WHERE MyEnum=-1"); 
} 

은 불행히도 내가 마이그레이션하는 동안 테이블에서 읽을 수있는 방법을 해결하지 못할 (예를 들어, 당신은 어떻게 마이그레이션 ctx.MyTable.Any(m =>m.MyEnum == -1) 동안이 작업을 수행 할 수 있습니다). 이 작업을 수행하여 EF 마이그레이션 업데이트에서 일괄 처리 할 수있는 방법이 있습니까?

답변

-1

내 생각에 EF가 얼마나 느린지 (심지어 일괄 적으로 수행 할 때조차도) 당신이하고 싶은 일을 정확히하기 위해 저장 프로 시저를 작성한 다음, 마이그레이션이 실행되는 동안 단순히 저장 프로 시저를 호출하게하십시오. 모든 일이 SQL 측면에서 이루어지기 때문에 빨리 끝나야합니다.

+0

저는 원시 SQL 업데이트 (실제로 EF가 아님)를 이미 실행하고 있습니다. SP는 제한 시간 내에 완료되지 않고 실행 중 많은 로그/tempdb 공간을 사용하므로 동일한 문제가 발생하기 쉽습니다. –