В EF4.1 как я могу создать индекс только при создании БД? - PullRequest
1 голос
/ 09 ноября 2011

Я создаю модель с EF4.1 CodeFirst. Я использую:

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

И

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

для создания индекса. Проблема в том, что, если я помещу команду ExecuteSqlCommand в подпрограмму DbContext New, она будет выполняться при каждом запуске приложения, даже если БД уже существует, а затем возникает ошибка, поскольку индекс уже существует. Если я помещаю его в событие OnModelCreating, я получаю следующую ошибку:

The context cannot be used while the model is being created.

Так как я могу заставить команду ExecuteSqlCommand выполнять свою работу только при создании БД?

1 Ответ

0 голосов
/ 09 ноября 2011

Вам необходимо создать собственный инициализатор базы данных и выполнить команду SQL в методе Seed инициализатора.Инициализатор вызывается только один раз при создании базы данных. Здесь - аналогичный пример с уникальным индексом.

...