2017-07-25 13 views
0

Entity Frameworkを使用してデータベースを初期化する際に、未処理のSQLを実行する必要があります。 SQLは、列の照合順序を設定するために必要とされ、文脈が与えられたときのコードは、このコードを置くために質問があるこのEntity Frameworkの移行でRaw SQLを実行

context.Database.ExecuteSqlCommand("ALTER TABLE my_table ALTER COLUMN my_column nvarchar(200) COLLATE Latin1_General_CS_AS"); 

ようになりますか?私がのときにメソッドをConfiguration.csに入れたら、それはうまくいくが、後でマイグレーションとrebaselineを削除するとSQLを実行する知識が失われる。理想的には、このSQL実行を、EFが移行を有効にしてデータベースを更新するたびに実行する別のクラスに抽象化したいと考えています。

私は database initializerを使用しますが上さらに、それはこれらが唯一の呼び出し元のアプリケーションによって呼び出されることが表示されます読んで考えた

:これは、呼び出し元のアプリケーションの責任ではありません - 私は、エンティティフレームワークが作成したときに、それは照合を設定したいですデータベース。

EF初期/ベースライン設定の一部として生のSQLを実行するにはどうすればよいのでしょうか。これは、今後何が行われたのか分からないようにするためです。デフォルトConfiguration.cs

答えて

0
void Up() { 
    Sql("ALTER TABLE my_table ALTER COLUMN my_column nvarchar(200) COLLATE Latin1_General_CS_AS"); 
} 

別のオプションは、種子法の一部としてそれを行うことですが、移行は、より健全なようです。

+0

確かにこの移行は唯一の方法ですか?初めてデータベースを構築するときは、マイグレーションをクリアして新鮮なものにする必要があります。そうしないと、モデルが開発されたときにマイナスのマイグレーションが発生します。私はこれらのSQL文を毎回追加することを忘れてはならないでしょう。 –

+0

もう一度、@ JamesBの解決策を見つけましたか? – Dustin

関連する問題