0

EF4 winforms には、Datalayer、DomainClasses、UI、および Test プロジェクトを使用したソリューションがあります。
テスト プロジェクトは、メイン プロジェクトとは異なるデータベースを使用します。

UI の app.config で接続文字列名を使用してメインの接続文字列を設定しました。テスト プロジェクトの app.config に同じ接続文字列名でテスト接続文字列を設定しました。

私のコンテキストは、次のように接続文字列名を使用するように設定されています。

public class Context : DbContext
{
    public Context()
        : base("EFTest")    // uses named connection string from app.config
    {  }
    public DbSet<Person> People { get; set; }
    // etc
}

データレイヤー プロジェクトで移行を有効にできます。ただし、テスト プロジェクトでプロジェクトを有効にしようとすると、エラーが発生します。

 PM> enable-migrations -ProjectName Test
 No context type was found in the assembly 'Test'.

私は何が欠けていますか?

4

1 に答える 1

1

を含むプロジェクトでのみ移行を有効にする必要がありますDbContext。テスト プロジェクトに が含まれていない場合はDbContext、移行のために有効にする必要はありません。

詳細:

正確には指定していませんが、単一の のみを使用しているように聞こえますがDbContext、それは DataLayer プロジェクトにあります。このEnable-Migrationsコマンドは、移行自体を指定できるようにするために必要な足場構造を作成するだけです。移行は、実行するデータベース (test/live/dev) に関係なく、データベース バージョンにアップグレードおよびダウングレードするために実行する必要がある一連のコマンドを含む単一の名前付きクラスです。Enable-Migrationsしたがって、次を使用して、データレイヤー プロジェクトに対してのみ実行する必要があります。

> Enable-Migrations -ProjectName DataLayer

これらのコマンドは のプロジェクトに保存され、プロパティで参照DbContextするクラスをデータベース構造 (および Fluent API コードなど) と比較することによって生成されます。したがって、実際のデータベースではなく、テスト (または開発) データベースと比較して、これらを具体的に生成することをお勧めします。DbContextpublic DbSet<Person> People { get; set; }

> Add-Migration -ProjectName DataLayer -StartUpProjectName Test

これが完了したら、コマンドを実行して、具体的にライブ データベースまたはテスト データベースを移行することができます。

> Update-Database -ProjectName DataLayer -StartUpProjectName [Test|UI]

いつものように> get-help Enable-Migrations(またはget-help任意の migrations コマンドの場合)、すべての構成スイッチとその機能が一覧表示されます。

于 2013-10-17T10:13:18.453 に答える