Web アプリを実行してデータをデータベースに保存しようとすると、次の例外が発生します。
データベースにモデル メタデータが含まれていないため、モデルの互換性を確認できません。モデルの互換性は、Code First または Code First Migrations を使用して作成されたデータベースに対してのみ確認できます。
この問題を解決するために多くの問題を試しましたが、まだ解決していません!!
Web アプリを実行してデータをデータベースに保存しようとすると、次の例外が発生します。
データベースにモデル メタデータが含まれていないため、モデルの互換性を確認できません。モデルの互換性は、Code First または Code First Migrations を使用して作成されたデータベースに対してのみ確認できます。
この問題を解決するために多くの問題を試しましたが、まだ解決していません!!
ローカル マシンで開発している場合、移行を使用する必要はありません。データベースを常に削除するようにデータベース初期化子を設定し、データベースと対話するコードを実行すると、データベースが再作成され、エラーがなくなることがわかります。
うまくいくはずです、それが私のやり方です。
データベースを手動で削除してから、次のようにプロジェクトを再起動します。
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.");
}
}
}
Code-First Migrations を使用しようとしていますか? その場合、パッケージ マネージャー コンソールで次のコマンドを実行しましたか?
PM> Enable-Migrations