2011-11-09 11 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の新しいサブルーチンにExecuteSqlCommandを置くと、DBがすでに存在していてもアプリケーションが起動されるたびに実行され、インデックスが既に存在するためにエラーが発生するということです。私はOnModelCreatingイベントに入れた場合、私は次のエラーを取得する:

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

それでは、どのように私はExecuteSqlCommandを持つことができるDBが作成されているだけにそのことを行いますか?

+0

これは不吉なことです。質問が投稿されてから5分後に投票されました。それがとても良いのであれば、いい答えがないということですか? – GilShalit

答えて

0

カスタムデータベース初期化プログラムを作成し、イニシャライザのSeedメソッドでSQLコマンドを実行する必要があります。イニシャライザは、データベースの作成時に一度だけ呼び出されます。 Hereは一意のインデックスを持つ類似の例です。

+0

ありがとう、私はまだそれを試してみましたが、例は私が必要なもののように見えます。 – GilShalit

関連する問題