デフォルトのスキーマを設定してコンテキストを区別する
EF6では、複数のコンテキストを持つことができ、派生クラスのOnModelCreating
メソッドDbContext
(Fluent-API構成がある場所)でデフォルトのデータベーススキーマの名前を指定するだけです。これはEF6で機能します。
public partial class CustomerModel : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema("Customer");
// Fluent API configuration
}
}
この例では、データベーステーブルのプレフィックスとして( "dbo"ではなく) "Customer"を使用します。さらに重要なことには、__MigrationHistory
テーブルの前にプレフィックスが付けられますCustomer.__MigrationHistory
。したがって__MigrationHistory
、コンテキストごとに1つずつ、1つのデータベースに複数のテーブルを含めることができます。したがって、1つのコンテキストに対して行った変更は、他のコンテキストを台無しにすることはありません。
移行を追加するときは、構成クラスの完全修飾名(から派生DbMigrationsConfiguration
)をadd-migration
コマンドのパラメーターとして指定します。
add-migration NAME_OF_MIGRATION -ConfigurationTypeName FULLY_QUALIFIED_NAME_OF_CONFIGURATION_CLASS
コンテキストキーの短い言葉
このMSDNの記事によると「章-同じデータベースを対象に、複数のモデルが」EF 6は、おそらく唯一の場合でも、状況を処理するだろうMigrationHistory
、テーブルに存在するため、テーブルには、存在していたContextKeyの移行を区別するための列が。
ただしMigrationHistory
、上記で説明したようにデフォルトのスキーマを指定して、複数のテーブルを用意することをお勧めします。
別の移行フォルダを使用する
このようなシナリオでは、プロジェクト内のさまざまな「移行」フォルダーを操作することもできます。プロパティDbMigrationsConfiguration
を使用して、それに応じて派生クラスを設定できますMigrationsDirectory
。
internal sealed class ConfigurationA : DbMigrationsConfiguration<ModelA>
{
public ConfigurationA()
{
AutomaticMigrationsEnabled = false;
MigrationsDirectory = @"Migrations\ModelA";
}
}
internal sealed class ConfigurationB : DbMigrationsConfiguration<ModelB>
{
public ConfigurationB()
{
AutomaticMigrationsEnabled = false;
MigrationsDirectory = @"Migrations\ModelB";
}
}
概要
全体として、すべてが明確に分離されていると言えます:コンテキスト、プロジェクトのMigrationフォルダー、データベースのテーブル。
より大きなトピックの一部であるが、外部キーを介して互いに関連していないエンティティのグループがある場合、私はそのようなソリューションを選択します。
エンティティのグループが互いに何もする必要がない場合は、エンティティごとに個別のデータベースを作成し、さまざまなプロジェクトでそれらにアクセスします。おそらく、各プロジェクトで1つのコンテキストを使用します。