ado.net 데이터 서비스에서 .sevechanges () 메소드를 사용하는 가장 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/190066

문제

.SeveChanges () 방법의 사용에 대한 좋은 정보가 있습니까?

내 데이터 컨텍스트 객체에서 .sevechanges () 메소드를 사용하려고 할 때 다양한 문제가 발생합니다. 기존 데이터 소스에서 데이터를 가져 와서 적절한 entityFramework/DataService 객체를 작성하고, 생성 된 객체를 데이터로 채우고, 해당 객체를 컨텍스트에 추가 한 다음 .SaveChanges를 호출하여 해당 데이터를 저장합니다.

내가 생각해 낸 시나리오 (그리고 그들과 관련된 문제)는 마찬가지로 ... 각 시나리오에서는 데이터 가능에서 행에서 데이터를 가져오고 객체를 생성하여 컨텍스트에 첨부하는 Foreach 루프가 있습니다. 그들은 간다. (참고 : 세트 링크 호출을 통해 첨부 된 3 개의 객체 A "멤버"및 2 개의 "주소" - 기본적으로 이것은 하나의 데이터 저장소에서 데이터를 가져 와서 데이터 서비스에 의해 노출되는 데이터 저장소로 마사지하는 변환 도구입니다.

  • foreach 루프 끝에 매개 변수가없는 .sevechanges ()를 호출하십시오 (즉, 루프 외부)
    • OutefMemory 오류 약 1/3 (90,000 절약 중 30,000 명) - 각 저장 항목이 데이터베이스에 대한 별도의 SQL 호출이기 때문에 어떻게 발생하는지 잘 모르겠습니다. 메모리가 부족한 것은 무엇입니까?
  • 루프 당 한 번 매개 변수없이 .sevechanges ()를 호출하십시오.
    • 이것은 작동하지만 절대적으로 영원히 필요합니다 (90,000 절약을 위해 8 시간)
  • foreach 루프 끝에 .sevechanges (savechangesoption.batch)를 한 번 호출하십시오.
    • 동일 외부 메모리 오류이지만 데이터베이스에 대한 저장없이
  • 루프 당 한 번 .sevechanges (SaveChangesOption.batch)를 호출하십시오
    • 404 발견되지 않았습니다
  • 10 루프 당 한 번 .sevechanges (Savechangesoption.batch)를 호출하십시오
    • 400 불량 요청 오류 (때때로)
    • 다수의 itterations 후에 외곽
  • 루프 당 한 번 컨텍스트를 작성하거나 루프 시작시 변수로 사용하거나 이용 가능한 개인 멤버 변수로 사용하려는 여러 가지 임의의 시도가 있습니다.
    • 다른 결과, 정량화 할 수없고, 정말 좋은 사람은 없습니다.

이와 같이 큰 데이터로드를 수행 할 때 클라이언트 객체에서 .sevechanges ()를 호출하는 선호하는 방법은 무엇입니까? .sevechanges ()가 어떻게 작동하는지에 대해 얻지 못하는 것이 있습니까? 누구나이 기능을 사용하는 방법과 데이터 서비스를 통해 데이터 저장에 대한 제한 사항에 대한 자세한 내용을 제공 할 수 있습니까? .sevechanges () 메소드 호출에 대한 모범 사례가 있습니까? .sevechanges () 메소드 호출에 대한 특히 좋은 문서가 있습니까?

도움이 되었습니까?

해결책

EntityFramework (일부 임의의 실험)를 사용하는 데 큰 경험이 없습니다.

나는 다음과 같은 것을 의미합니다.

int i = 0;
foreach (var item in collection)
{
    // do something with your data
    if ((i++ % 10) == 0)
        context.SaveChanges();
}
context.SaveChanges();

나는 그것이 추악하다는 것을 알고 있지만, 내가 생각해 낸 첫 번째 가능한 해결책입니다.

다른 팁

작은 프로젝트에서 EntityFramework를 사용하고 있으므로이 질문에도 관심이 있습니다. 두 가지 빠른 질문 : 캐싱 OG를 데이터 콘텍스트에서 데이터 객체를 돌리려고 했습니까? Datacontext를 닫으려고했고 루프 중에 메모리를 확보하기 위해 새로운 것을 만들었습니까?

문안 인사

케네스

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top