質問: 私は`MVC5`プロジェクトを持っていて、 `Entity Framework 6 - Code First`マイグレーションによってデータベースにテーブルを移入しました。テーブルを見ると、一部の文字が正しく表示されず、 `Database Collation`が`SQL_Latin1_General_CP1_CI_AS`代わりに`French_CI_AS`ことが`French_CI_AS` 。 **1)** `Code First`を介してデータベースを作成する際に、 `Database Collation`を設定するにはどうすればよいですか?私は以下の方法を見つけましたが、それがこの目的のための最善の選択肢であるかどうかは分かりません。 ``` public override void Up() { Sql("ALTER DATABASE [YourDB] COLLATE [YourCollation]", suppressTransaction: true); [...Your DB Objects Creation codes here...] } ``` 一方、このスクリプトを使用すると、 *"ALTER DATABASE failed"という*エラーが発生します。 *データベース 'DbName'のデフォルトの照合順序をFrench_CI_ASに設定できません "という*エラーが表示*され*ます。 **2)**関連するテーブルにデータを追加した後で、 `Database Collation`を変更することは可能ですか? どんな助けも高く評価されるでしょう...
回答: データを追加した後でも照合を変更することができます。あなたの問題は、照合変更を実行している間にデータベースをシングルユーザーモードにする必要があるという事実から来ていると思います。他の接続で使用されないようにするには、データベースをロックする必要があります。終了後、マルチユーザーモードを復元します。 これがあなたの場合、質問に表示されているものに加えて、このエラーが発生しているはずです。 > 操作を実行するためにデータベースを排他的にロックすることはできませんでした。 > > それを修正する移行コード: ``` public override void Up() { Sql("ALTER DATABASE [YourDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;"); Sql("ALTER DATABASE [YourDB] COLLATE [YourCollation];"); Sql("ALTER DATABASE [YourDB] SET MULTI_USER;"); [...Your DB Objects Creation codes here...] } ``` `supressTransaction`パラメータを削除する`supressTransaction`ます。いくつかのステップが失敗した場合に備えて、この操作を単一のトランザクションで実行してください。