太長不看版:
内蔵テーブルについて、すべての起動プロジェクト(
XXX.DbMigrator
を除く)のProgram.cs
ファイルとXXXDbContextFactory
で、AbpCommonDbProperties
とAbpOpenIddictDbProperties
の値を設定します。自分たちのエンティティテーブルの場合は、XXX.Domain/XXXConsts.cs ファイルを見つけて、関連する値を変更すればよいです。
Abp フレームワーク自体には、AbpAuditLogs、AbpAuditLogActions テーブルなどのいくつかのテーブルが含まれており、Abp はテーブル名のプレフィックスであり、この値は変更可能です。
Abp 内蔵テーブルのテーブル名プレフィックスとスキーマの変更#
テンプレートプロジェクトの生成#
まず、Cli を使用してテンプレートプロジェクトを生成します。
// abp version 6.0.2
abp new MyApp
生成されたプロジェクトを開き、MyApp.EntityFrameworkCore
プロジェクトを見つけます。
Migrations/MyAppDbContextModelSnapshot.cs
ファイルを開き、約 144 行目に次の行があるのが見えます。
b.ToTable("AbpAuditLogs", (string)null);
デフォルトで生成されたテンプレートプロジェクトでは、Abp をテーブルプレフィックスとして使用し、スキーマは null に設定されています。
この Migrations
フォルダーを削除します。
テーブル名プレフィックスを設定する場所を見つける#
再び MyApp.EntityFrameworkCore
プロジェクトに戻り、EntityFrameworkCore/MyAppDbContext.cs
ファイルを見つけます。
public class MyAppDbContext :
AbpDbContext<MyAppDbContext>,
IIdentityDbContext,
ITenantManagementDbContext
{
// ...
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
// ここでいくつかの内蔵テーブルの設定を行っています
builder.ConfigurePermissionManagement();
builder.ConfigureSettingManagement();
builder.ConfigureBackgroundJobs();
builder.ConfigureAuditLogging();
builder.ConfigureIdentity();
builder.ConfigureOpenIddict();
builder.ConfigureFeatureManagement();
builder.ConfigureTenantManagement();
// ...
}
}
OnModelCreating
メソッドを見つけ、これらの builder.ConfigureXXX()
メソッドに入って、ソースコードの実装を確認します。
Ctrl キーを押しながら左クリックすると、逆コンパイルされ、Abp の対応するソースコードが表示されます。ConfigurePermissionManagement
メソッドを開くと、次のコードが見えます。
public static void ConfigurePermissionManagement([NotNull] this ModelBuilder builder)
{
// ...
builder.Entity<PermissionGrant>(b =>
{
// ここでテーブル名プレフィックスとスキーマを設定しています
b.ToTable(AbpPermissionManagementDbProperties.DbTablePrefix + "PermissionGrants", AbpPermissionManagementDbProperties.DbSchema);
// ...
});
// ...
}
PermissionGrant
エンティティに対応するテーブル名の設定が AbpPermissionManagementDbProperties
に関連付けられているのが見えます。他の builder.ConfigureXXX()
メソッドを開いても、同様の設定が見られます。
次に AbpPermissionManagementDbProperties
クラスを見つけて、さらに探ります。
public static class AbpPermissionManagementDbProperties
{
public static string DbTablePrefix { get; set; } = AbpCommonDbProperties.DbTablePrefix;
public static string DbSchema { get; set; } = AbpCommonDbProperties.DbSchema;
public const string ConnectionStringName = "AbpPermissionManagement";
}
PermissionGrant
エンティティに関するすべての設定、テーブル名プレフィックス DbTablePrefix
、スキーマ DbSchema
、およびデータベース接続文字列名 ConnectionStringName
が表示されます。つまり、プロジェクトの起動時にこれらの値を個別に変更することで、関連する設定を変更できます。
AbpPermissionManagementDbProperties
クラスのテーブル名プレフィックス DbTablePrefix
とスキーマ DbSchema
は AbpCommonDbProperties
クラスに依存しているため、このクラスの実装を見つけます。
public static class AbpCommonDbProperties
{
/// <summary>
/// このテーブルプレフィックスはほとんどの ABP モジュールで共有されています。
/// これを変更することで、すべてのモジュールのテーブルプレフィックスを設定できます。
///
/// デフォルト値: "Abp"。
/// </summary>
public static string DbTablePrefix { get; set; } = "Abp";
/// <summary>
/// デフォルト値: null。
/// </summary>
public static string DbSchema { get; set; } = null;
}
この設定項目は、デフォルトテンプレート生成の設定と一致し、テーブル名プレフィックスは Abp
で始まり、スキーマは null
に設定されています。基本設定項目を見つけたので、デフォルトの設定を変更できます。
デフォルト設定の変更#
すべての起動プロジェクト(XXX.DbMigrator
を除く)の Program.cs
ファイルと XXXDbContextFactory.cs
ファイルで設定を行います。
// すべての起動プロジェクト(`XXX.DbMigrator` を除く)
public class Program
{
public async static Task<int> Main(string[] args)
{
AbpCommonDbProperties.DbSchema = "abp";
AbpCommonDbProperties.DbTablePrefix = "ABP_";
// ...
}
}
// XXXDbContextFactory.cs (デフォルト生成は XXX.EntityFrameworkCore/EntityFrameworkCore)
public XXXDbContext CreateDbContext(string[] args)
{
AbpCommonDbProperties.DbSchema = "abp";
AbpCommonDbProperties.DbTablePrefix = "ABP_";
// ...
}
初回マイグレーションコードの生成#
まず、XXX.EntityFrameworkCore
プロジェクト内の Migrations
フォルダーを削除します。ここには元々生成されたマイグレーションファイルがあります。
次に XXX.DbMigrator
プロジェクトを実行して、マイグレーションファイルを生成します。
再度 Migrations/MyAppDbContextModelSnapshot.cs
ファイルを開き、144 行目を見つけると、生成されたマイグレーションコードに私たちの設定が適用されているのが見えます。
// テーブル名プレフィックス ABP_
// スキーマ abp
b.ToTable("ABP_AuditLogs", "abp");
特殊なテーブル#
マイグレーションを実行した後、データベースを確認すると、4 つのテーブルのテーブル名プレフィックスとスキーマが私たちの期待通りに設定されていないことがわかります。これらのテーブルは OpenIddict
をプレフィックスとしています。
コードに戻り、MyAppDbContext.cs
ファイルの OnModelCreating
メソッドを見つけると、次の行が見つかります。
builder.ConfigureOpenIddict();
ソースコードを逆コンパイルして確認すると、OpenIddict
をプレフィックスとするいくつかのエンティティクラスがあり、テーブル設定が AbpOpenIddictDbProperties
クラスに関連付けられていますが、AbpOpenIddictDbProperties
クラスの設定は AbpCommonDbProperties
に依存していないため、これらのエンティティを個別に設定する必要があります。
// 前述の Program.cs と XXXDbContextFactory.cs に以下の設定を追加
AbpOpenIddictDbProperties.DbSchema = "abp";
AbpOpenIddictDbProperties.DbTablePrefix = "ABP_";
再度 Migrations
フォルダーを削除し、データベースをクリアしてから XXX.DbMigrator
プロジェクトを実行し、マイグレーションを適用すると、データベースに生成されたテーブルが表示されます。
個別設定#
MyAppDbContext.cs
ファイルの OnModelCreating
メソッドの以下のコードから、いくつかの関連設定を見つけることができ、ソースコードを逆コンパイルして各設定が依存する XXXDbProperties
を見つけ、Program.cs
と XXXDbContextFactory.cs
ファイルに相応しい設定を追加すればよいです。
builder.ConfigurePermissionManagement();
builder.ConfigureSettingManagement();
builder.ConfigureBackgroundJobs();
builder.ConfigureAuditLogging();
builder.ConfigureIdentity();
builder.ConfigureOpenIddict();
builder.ConfigureFeatureManagement();
builder.ConfigureTenantManagement();
ユーザーテーブルのテーブル名プレフィックスとスキーマ#
ユーザーテーブルのこれらの設定は比較的簡単で、生成されたコードの中で直接見つけることができます。
// MyApp.Domain プロジェクト
// MyAppConsts クラス
public static class MyAppConsts
{
public const string DbTablePrefix = "App";
public const string DbSchema = null;
}
これらの設定を変更すれば大丈夫です。