5

自動移行を有効にしました。次に、データベース全体を削除しました。次に、Update-databaseコマンド コンソールから実行すると、データベースが再作成されました。次に、このエラーを表示するためだけにアプリケーションを開始しました。

データベースにモデル メタデータが含まれていないため、モデルの互換性を確認できません。モデルの互換性は、Code First または Code First Migrations を使用して作成されたデータベースに対してのみ確認できます。

では、そのメタデータとは正確には何であり、エンティティ フレームワークをどのように参照すればよいのでしょうか?

PS。私のデータベースには、という名前のテーブルが含まれていますMigrationsHistory

4

5 に答える 5

6

これは、私が少し前に書いたこれを解決するための可能な方法の詳細な説明です...
(あなたが経験しているものとは正確に異なるため、それ自体は重複していませんが、さまざまなシナリオを念頭に置いています)

https://stackoverflow.com/a/10255051/417747

要約する...

私にとってうまくいくのは、 Update-Database -Script を使用することです

これにより、「移行の違い」を含むスクリプトが作成されます。これは、ターゲット サーバー データベースに SQL スクリプトとして手動で適用できます (適切な移行テーブルの行を挿入する必要があります)。

それでもうまくいかない場合は、次の 2 つのことを行うことができます...

a) 移行テーブルを削除します (ターゲット - システム テーブルの下) - http://blogs.msdn.com/b/adonet/archive/2012/02/09/ef-4-3-automatic-migrations-walkthrough に従って。そこにあるaspx コメント - 以前の動作にフェールバックする必要があり、Db-s が同じであることが確実な場合 - 「信頼する」だけです。

b)私が使用した最後の手段として-完全なスキーマのUpdate-Database -Scriptを作成し(たとえば、「完全なスクリプト」を強制する空のデータベースを初期化することにより)、INSERT INTO [__MigrationHistory]レコードを見つけて、それらを実行します。それらをデータベースに挿入し、データベースとコードが一致していることを確認します。

これにより、物事が再び同期して実行されるようになります。

それが役立つ場合

于 2013-03-13T22:22:06.907 に答える
1

Visual Studio の「サーバー エクスプローラー」から例として「database1.mdf」と言うローカル データベースをデタッチし、SQL サーバー管理スタジオを開き、[データベース] > [アタッチ] を右クリックして、同じ「database1.mdf」ファイルを参照します。アクセス権がない場合次に、mdf ファイルと ldf ファイルの両方を C ドライブにコピー & ペーストして、添付します。

次に、SQL サーバーで新しいクエリ ウィンドウを開き、以下のクエリのように ID テーブルをコピーします。

*'select * を [__MigrationHistory] ​​から Database1.dbo.__MigrationHistory '*

于 2014-09-13T10:53:02.977 に答える
-1

これをコンテキストに追加します。

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{
    modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
}
于 2013-03-13T22:15:06.857 に答える
-1

Entity Framework 6、SQL 2008 R2、VS 2013
を使用しています。この問題を解決するには、次の手順のみを使用してください。

1)既存のデータベースを削除します(EFモデルで作成された既存のデータベース{コードが最初})
2)APPを再度実行します。

For example query code (in Layout):
このコードは、モデルが変更された場合にデータベースを作成し、ユーザー テーブルでユーザー名を検索します。

<body>
    @{
        // Delete && Create ...
        Database.SetInitializer(new DropCreateDatabaseIfModelChanges<DBContext>());

        var db = new DBContext();
        var SearchingUser = db.Users.Where(c => c.UserName == "qwertyui");
        if (SearchingUser.Count() == 0) {
            var User = new Users { UserName = "qwertyui",Password = "12345678" };
            db.Users.Add(User);
            db.SaveChanges();
        }

    }


    @RenderSection("scripts", required: false)
    @RenderBody()
</body>
于 2014-05-24T11:51:12.967 に答える