0

EF 4.3.1 add-migrations コマンドを実行しようとすると、エラーが発生します。

「データベースが作成されてから、... コンテキストをサポートするモデルが変更されました」。

エラーが発生するシーケンスの 1 つを次に示します (ただし、おそらく多数のバリアントを試しましたが、いずれも失敗します)。

1) EF Code First によって作成されたデータベースから開始します (つまり、InitialCreate 行のみを含む _MigrationHistory テーブルが既に含まれています)。

2) この時点で、アプリのコード データ モデルとデータベースは同期しています (データベースは、アプリの起動時に CF によって作成されました)。

3) 「サービス」プロジェクトに 4 つの DBContext があるため、「enable-migrations」コマンドを実行しませんでした (複数のコンテキストを処理しません)。代わりに、Services プロジェクトと Configuration.cs ファイル (この投稿の最後に含まれています) に Migrations フォルダーを手動で作成しました。【どこかの記事で読んだ気がする】

4) データベースがまだ変更されておらず、アプリが停止している状態で、VS EDM エディターを使用してデータ モデルに簡単な変更を加え (既存のエンティティに 1 つのプロパティを追加)、新しいクラスを生成します (ただし、変更はしません)。明らかにデータベースです)。次に、ソリューションを再構築すると、すべて問題ないように見えます (もちろん、データベースを削除したり、アプリを再起動したりしないでください)。

5) 次の PMC コマンドを実行します (「App」は Configuration.cs 内のいずれかのクラスの名前です)。

PM> add-migration App_AddTrivial -conf App -project Services -startup Services -verbose

... 「モデル ... が変更されました。Code First Migrations の使用を検討してください ...」エラーで失敗します。

私は何を間違っていますか?そして、私がすでに使用しようとしているものを使用するように私に言っているツールの皮肉を見ている人はいますか ;-)

EF CF によって作成されたデータベースから始まるソリューションをセットアップするための正しい手順は何ですか? -ignorechanges を使用して初期移行を実行するように言っている投稿を見たことがありますが、それを試してみましたが、役に立ちません。実際、私は一日中さまざまな順列をテストしてきましたが、何もうまくいきません!

私は本当にばかげたことをしているに違いありませんが、何がわかりません!

ありがとう、

お父さん猫

Configuration.cs:

名前空間 mynamespace { 内部シール クラス App : DbMigrationsConfiguration { public App() { AutomaticMigrationsEnabled = false; MigrationsNamespace = "Services.App.Repository.Migrations"; }

    protected override void Seed(.Services.App.Repository.ModelContainer context)
    {

    }
}

internal sealed class Catalog : DbMigrationsConfiguration<Services.Catalog.Repository.ModelContainer>
{
    public Catalog()
    {
        AutomaticMigrationsEnabled = false;
        MigrationsNamespace = "Services.Catalog.Repository.Migrations";
    }

    protected override void Seed(Services.Catalog.Repository.ModelContainer context)
    {

    }
}

internal sealed class Portfolio : DbMigrationsConfiguration<Services.PortfolioManagement.Repository.ModelContainer>
{
    public Portfolio()
    {
        AutomaticMigrationsEnabled = false;
        MigrationsNamespace = "Services.PortfolioManagement.Repository.Migrations";
    }

    protected override void Seed(Services.PortfolioManagement.Repository.ModelContainer context)
    {

    }
}

internal sealed class Scheduler : DbMigrationsConfiguration<.Services.Scheduler.Repository.ModelContainer>
{
    public Scheduler()
    {
        AutomaticMigrationsEnabled = false;
        MigrationsNamespace = "Services.Scheduler.Repository.Migrations";
    }

    protected override void Seed(Services.Scheduler.Repository.ModelContainer context)
    {

    }
}

}

4

1 に答える 1

0

EF移行を使用する場合、データベースごとに1つのデータコンテキストが必要です。非常に大きくなる可能性があることは知っていますが、分割しようとすると、いくつかの問題が発生します。1つは、発生している移行の問題です。後で、さまざまなコンテキストのテーブルを結合するクエリを作成しようとすると、問題が発生する可能性があります。そのようにしないでください、それはEFがどのように設計されているかに反します。

于 2012-07-04T08:23:14.597 に答える