1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

EFCoreでdbo以外のSchemaを指定する

Last updated at Posted at 2022-07-22

はじめに

EntityFrameworkCoreでDBを作成すると、テーブルはdboスキーマに作成されます。

dbo.PNG

今回は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スキーマが追加されます。

schema.PNG

__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"));
        }
    }

データベースを更新することで反映されます。

migrationhistory.PNG

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?