1

Entity Framework バージョン 5.0 を使用しています。クラスはモデル ファーストから作成されましたが、現在はコード ファーストです。例:

public class tTableName: EntityTypeConfiguration<EntityName> {
    public tTableName() {
        // Primary Key
        this.HasKey(t => t.ID);

        // Properties
        this.Property(t => t.Column2)
                .IsRequired()
                .HasMaxLength(255);

        this.Property(t => t.Column5)
                .HasMaxLength(5);

        // Table & Column Mappings
        this.ToTable("tTableName");
        this.Property(t => t.ID).HasColumnName("ID");
        this.Property(t => t.Column2).HasColumnName("Column2");
        this.Property(t => t.Column3).HasColumnName("Column3");
        this.Property(t => t.Column4).HasColumnName("Column4");
        this.Property(t => t.Column5).HasColumnName("Column5");
        this.Property(t => t.Column6).HasColumnName("Column6");
    }
}

public class EntityName{
    public int ID { get; set; }
    public string Column2{ get; set; }
    public string Column3 { get; set; }
    public DateTime? Column4 { get; set; }
    public string Column5 { get; set; }
    public int? Column6 { get; set; }
}

私の DataContext クラスではOnModelCreating、一度に 1 つずつ tTableName クラスをオーバーライドして渡しました。これはすべて、データベースのリバース エンジニアリング (スキーマ ファースト? データベース ファースト?) によって作成されました。

したがって、データベースが存在し、スキーマが作成され、EF 移行または初期化子を使用していません。 Database.SetInitializer<DataContext>(null);

問題

アプリケーションが起動すると、すべてが正常にロードおよび初期化されます。Application_OnStart でデータベース クエリを実行して、それが機能することを確認します。しかし、アプリケーション プールのリサイクル後、24 時間正常に実行された後、アプリケーションが動作を停止します。IIS の再起動、アプリケーション プールのリサイクル、マシンの再起動でも効果はありません。私が得るエラーは次のとおりです。

エンティティ TypeName は、現在のコンテキストのモデルの一部ではありません。

これはあまりよろしくない。少し前に動作しました。しかし、私が何をしても、それを再び機能させることはできません。新しいバイナリをアップロードするか、/bin フォルダーに変更を加える場合を除きます。これにより何かがリセットされ、Entity Framework がモデルを再構築するようになります。コードをトレースしてログを確認すると、Entity Framework が何らかの理由でデータベース モデルを「忘れて」しまい、アプリケーションの再起動時に ModelCreating ステップをスキップしているように見えます。

私は、Entity Framework がモデルを構築し、それを出力または何かに保存していると想定しています。そのため、ModelCreating を呼び出す必要はありません。この回答によると、Entity Framework (4.0 以降) はモデルをキャッシュしますが、同じ AppDomain 内に新しい DbContext を作成するときにのみ再利用します。では、モデルが破損する原因は何でしょうか? Application_OnStart でモデルの再構築を強制するにはどうすればよいですか?

4

1 に答える 1