3

Web アプリを実行してデータをデータベースに保存しようとすると、次の例外が発生します。

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

この問題を解決するために多くの問題を試しましたが、まだ解決していません!!

4

3 に答える 3

3

ローカル マシンで開発している場合、移行を使用する必要はありません。データベースを常に削除するようにデータベース初期化子を設定し、データベースと対話するコードを実行すると、データベースが再作成され、エラーがなくなることがわかります。

うまくいくはずです、それが私のやり方です。

于 2012-05-17T11:11:28.027 に答える
2

データベースを手動で削除してから、次のようにプロジェクトを再起動します。

public class DbDataContext : DbContext
{
    public IDbSet<FlightType> FlightTypes { get; set; }

    public DbDataContext()
    {
        //Validates if database Exists or if is CompatibleWithModel
        //Using when Databes is productive - use code first migrations for db changes in this case
        //Database.SetInitializer(new ValidateDatabase<DbDataContext>());

        //Custom Initializer - crates databse with required entries
        //Using while developing
        Database.SetInitializer<DbDataContext>(new DatabaseInitializer<DbDataContext>());
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    }
}

データベース初期化子:

public class DatabaseInitializer<T> : DropCreateDatabaseIfModelChanges<DbDataContext>
{
    protected override void Seed(DbDataContext dbDataContext)
    {
        dbDataContext.FlightTypes.Add(new FlightType { FlightTypeNummer = "axd", Name = "AXD_LX", IsDefault = true });

        base.Seed(dbDataContext);
     }
 }

データベースの検証:

public class ValidateDatabase<TContext> : IDatabaseInitializer<TContext> where TContext : DbContext
{
    public void InitializeDatabase(TContext context)
    {
        if (!context.Database.Exists())
        {
            throw new InvalidOperationException("Database does not exist");
        }
        if (!context.Database.CompatibleWithModel(true))
        {
            throw new InvalidOperationException("The database is not compatible with the entity model.");
        }
    }
}
于 2013-03-25T07:48:07.963 に答える
0

Code-First Migrations を使用しようとしていますか? その場合、パッケージ マネージャー コンソールで次のコマンドを実行しましたか?

PM> Enable-Migrations
于 2012-05-17T09:49:45.330 に答える