Entity Framework 6의 삽입 순서를 결정하는 논리는 무엇입니까?

c# entity-framework entity-framework-6 entity-framework-core

문제

따라서 DBContext가 있고 다음 작업을 수행하고 있습니다.

dbContext.SomeTables1.Add(object1)
dbContext.SomeTables2.AddRange(objectArray2)
dbContext.SomeTables3.AddRange(objectArray3)
dbContext.SaveChanges();

EF는 db 레코드를이 순서대로 삽입하지 않고 임의의 순서로 삽입합니다. 같은 순서로 삽입하려면 dbContext.SaveChanges() 를 추가 할 때 dbContext.SaveChanges() 해야합니다. 이것은 효율적인 솔루션이 아니며 제 경우에는 모든 삽입 작업을 수행하는 데 10 초가 걸리는 반면 한 번의 저장으로 무작위 순서는 약 3 초 정도 걸립니다.

주의 : 교착 상태 문제를 해결하려면 올바른 순서가 필요합니다.

내 질문은 다음과 같습니다.

  • 이 문제는 EF7에서 해결 되었습니까?
  • EF를 프로파일 링하고 무작위 순서를 결정할 수 있지만, 동일한 임의의 순서와 일관되게 또는 요청간에 변경된다는 보장이 있습니까? (이 질문에 대한 답이 긍정적 인 경우 다른 코드를 사용할 수 있습니다.)
  • 추가 할 때마다 dbContext.SaveChanges() 보다 순서를 유지하는 더 좋은 방법이 있습니까?

수락 된 답변

  • EF6 또는 EF7에서 저장 명령을 지정할 수있는 방법은 없습니다.
  • 이것이 문제가 아니기 때문에 EF7에서 문제가 해결되지 않았습니다.
  • 전임자가 동일하면 순서가 동일합니다 (거의 발생하지 않음).

SaveChanges를 호출하면 모든 엔터티가 "ProduceDynamicCommands"메서드의 내부 순서에서 순서가 지정됩니다. "TryTopologicalSort"메서드에 의해 다시 정렬됩니다. 이전 버전이없는 명령을 추가하기 위해 반복됩니다 (A 및 B를 추가하고 A를 B이면 B가 A 앞에 삽입됩니다)

배치 추가로 삽입 할 수 있습니다.

삽입을 수행하는 데 3 초가 걸리므로 수천 개의 엔티티가 있다고 가정하고 대량 삽입을 수행하면 실적을 개선하여 10 초를 줄이고 초기 3 초를 단축 할 수 있습니다!

제가 추천 할 수있는 도서관은 다음과 같습니다 :

면책 조항 : 저는 Entity Framework Extensions 프로젝트의 소유자입니다.


인기 답변

추가 기능을 사용하기 전에 주문할 수 있으며 저장 기능을 사용할 수 있습니까? 도움이 되었습니까 / 시도해 보셨습니까?




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