2013-05-10 6 views
2

Entity Framework 5 사용과 관련하여 매우 빠른 질문이 있습니다. 많은 사람들이 아마도 아래 표시된 코드를 사용해야하는 이유를 알고있을 것입니다. 그러나이 논리를 레이어로 분리하고 웹 레이어에서 Entity Framework DLL을 참조하지 않으므로이 코드를 내 DbContext 클래스의 정적 생성자에 넣습니다.정적 생성자의 Database.SetInitializer()?

이것은 나쁜 생각입니까? 이렇게하면 앱에 성능이 저하 될까요?

Database.SetInitializer<DataContext<T>>(null); 

미리 감사드립니다.

답변

4

언급 할 가치가있는 성능적인 히트는 없습니다. 정적 생성자는 응용 프로그램과 첫 번째 클래스 인스턴스가 만들어 질 때 한 번 호출됩니다. 대부분의 응용 프로그램에서이 작업을 수행하고 있으며 아직 문제를 발견하지 못했습니다.

호출하는 웹 레이어 어셈블리에서 EF에 대한 참조없이 데이터 영역의 정적 메서드를 통해이 줄을 호출 할 수도 있습니다.

이 줄은 이니셜 라이저에 대한 내부 참조 만 설정하고 값 비싼 작업은하지 않는다고 생각합니다. EF 모델을 찾고 구축하는 비용이 많이 드는 작업은 첫 번째 컨텍스트 인스턴스가 사용될 때 수행됩니다.

사이드 노트 : 응용 프로그램의 시작 부분에 지연이 발생하여 사용자가 응용 프로그램의 첫 번째 쿼리를 실행할 때이를 방지하려면이 비싼 작업을 응용 프로그램의 시작 부분에서 수행하는 것이 때때로 바람직 할 수 있습니다. 신청. 초기화를 강제 실행하려면 초기화 도구를 설정하고 초기화 자체를 실행하십시오 (예 :

Database.SetInitializer<DataContext>(null); 
using (var context = new DataContext()) 
{ 
    context.Database.Initialize(false); 
} 
).