2011-11-09 4 views
1

EF4.1 CodeFirst를 사용하여 모델을 생성합니다. 내가 사용EF4.1에서 DB를 만들 때만 인덱스를 만들 수 있습니까?

Database.SetInitializer(Of dbModel.dbDB2Data)(New DropCreateDatabaseIfModelChanges(Of dbModel.dbDB2Data)) 

그리고

MyBase.Database.ExecuteSqlCommand("CREATE INDEX IX_EXPLAN ON DBO.EXPLANS (PROGNAME, BIND_TIME, ACCESSNAME)") 

인덱스를 만들 수 있습니다. 문제는 DbContext New 서브 루틴에 ExecuteSqlCommand를두면 DB가 이미 존재하더라도 응용 프로그램이 시작될 때마다 실행되고 인덱스가 이미 존재하기 때문에 오류가 발생한다는 것입니다. 나는 그것이 OnModelCreating 이벤트에 저장할 경우, 나는 다음과 같은 오류가 발생합니다 :
The context cannot be used while the model is being created. 

그래서 내가 어떻게 DB가 생성되는 경우에만 그 일을 수행 ExecuteSqlCommand을 가질 수있다?

+0

이것은 불길한 것입니다. 질문을 올린 후 5 분 후에 투표됩니다. 그것이 너무 좋다면 그것은 좋은 대답이 없다는 것을 의미합니까? – GilShalit

답변

0

사용자 지정 데이터베이스 초기화 프로그램을 만들고 이니셜 라이저의 Seed 메서드에서 SQL 명령을 실행해야합니다. 이니셜 라이저는 데이터베이스를 만들 때 한 번만 호출됩니다. Here은 고유 인덱스가있는 유사한 예입니다.

+0

고마워, 아직 시도해 보았지만 예제는 내가 필요한 것처럼 보인다. – GilShalit

관련 문제