在EF4.1中,如何仅在创建数据库时创建索引?

时间:2011-11-09 11:45:03

标签: .net entity-framework-4 ef-code-first

我正在使用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 :(得分:0)

您需要创建自定义数据库初始化程序并在初始化程序的Seed方法中执行SQL命令。创建数据库时,只会调用初始化程序一次。 Here是具有唯一索引的类似示例。