はじめに
EntityFrameworkCoreでDBを作成すると、テーブルはdboスキーマに作成されます。
今回はefcoreでdbo以外のスキーマを作成します。
やること
モデルで設定するTable属性にSchemaプロパティがあるので任意の名前を指定します。
UserProfileEntity.cs
// ↓
[Table("UserProfile_Schema", Schema = "test")]
public class UserProfileEntity
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string UserName { get; set; }
}
この設定をした上で再度マイグレーションを行うとマイグレーションファイルにスキーマ関連の記述が追加されています。
Migration.cs
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.EnsureSchema(
name: "test");
migrationBuilder.CreateTable(
name: "UserProfile_Schema",
schema: "test",
//...
}
実際のデータベースではtestスキーマが追加されます。
__MigrationHistoryテーブルのスキーマを変更する
このままでは変更履歴テーブル(__EFMigrationsHistory)のスキーマはdboのままなのでこちらも合わせて変更します。
MyDbContext.cs
public class MyDbContext : DbContext
{
//...
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
optionsBuilder.UseSqlServer(ConnectionString,
// ここを追加
x => x.MigrationsHistoryTable("__EFMigrationsHistory", "test"));
}
}
データベースを更新することで反映されます。