Entity Framework 4.3.1 CodeFirstを使用していて、テーブルを最終的に配置するスキーマを尊重するように移行またはスクリプトを取得することができません。
デフォルトの動作(私が何をしているかに関係なく表示される動作)は、実際に実行されるSQLからスキーマを完全に省略することで、移行またはスクリプトを実行するユーザーのデフォルトスキーマにテーブルが作成されるようです。
私のDBAは、私がADグループの一部であり、ローカルユーザーではないため、デフォルトスキーマを変更できないと言っています。そのため、スクリプトを実行しているユーザーのデフォルトスキーマを変更することはできません(多くの場合、推奨される回避策)。まったくオプション。
私は次のような注釈を使用してみました:
[Table("MyTable", Schema = "dbo")]
public class MyTable
{
public int Id { get; set; }
public string MyProp1 { get; set; }
public string MyProp2 { get; set; }
}
そして、私は同じことの流暢な変種を使ってみました:
modelBuilder.Entity<YourType>().ToTable("MyTable", "dbo");
結果のスクリプト(および移行)は、スキーマを指定しようとしたという事実を無視します。スクリプトは次のようになります。
CREATE TABLE [MyTable] (
[Id] [int] NOT NULL IDENTITY,
[MyProp1] [nvarchar](max),
[MyProp2] [nvarchar](max),
CONSTRAINT [PK_MyTable] PRIMARY KEY ([Id])
)
[dbo]が次のようにそこに押し込まれている必要がある場合:
CREATE TABLE [dbo].[MyTable] (
[Id] [int] NOT NULL IDENTITY,
[MyProp1] [nvarchar](max),
[MyProp2] [nvarchar](max),
CONSTRAINT [PK_MyTable] PRIMARY KEY ([Id])
)
他の誰かがEntityFrameworkにスキーマを尊重させることに幸運がありましたか?この動作は、エンタープライズ環境でコードファーストを使用する能力をほとんど損ないます。
注意:ユーザーを別のデフォルトスキーマに変更することは、まったくオプションではありません。