우리는 Entity Framework 버전 5.0을 사용하고 있습니다. 클래스는 Model-First에서 작성되었지만 이제는 코드 우선입니다. 예 : 내의 DataContext 클래스에서AppPool 재활용 후 Entity Framework 모델이 작동하지 않습니다.
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; }
}
, 나는 OnModelCreating
을 무시하고 tTableName 클래스를 한 번에 하나씩 전달했습니다. 이 모든 것은 저의 데이터베이스를 리버스 엔지니어링하여 만들어졌습니다 (Schema-First? Database-First?).
데이터베이스가 있으므로 스키마가 채워지고 EF 마이그레이션 또는 초기화 프로그램이 사용되지 않습니다. Database.SetInitializer<DataContext>(null);
문제점
우리의 응용 프로그램은 모든 부하를 시작하고 잘 초기화합니다. Application_OnStart에서 데이터베이스 쿼리를 수행하여 작동하는지 확인합니다. 그러나 응용 프로그램 풀 재활용 후 24 시간 동안 정상적으로 실행 된 후 어느 시점에서 응용 프로그램이 작동을 멈 춥니 다. IIS 다시 시작, 응용 프로그램 풀 재활용, 컴퓨터를 다시 부팅해도 아무 효과가 없습니다. 오류는 다음과 같습니다.
엔티티 TypeName은 현재 컨텍스트의 모델에 속하지 않습니다.
이것은 좋지 않습니다. 그것은 잠시 일했습니다. 하지만 내가하는 일 중 아무것도 다시는 작동하지 않을 수 있습니다. EXCEPT 새로운 바이너리를 업로드하거나/bin 폴더를 변경합니다. 이로 인해 Entity Framework가 모델을 다시 작성하도록 확신 할 수있는 무언가가 재설정됩니다. 코드를 추적하고 내 로그를 보면 Entity Framework가 데이터베이스 모델을 어떻게 든 잊었으며 응용 프로그램을 다시 시작할 때을 건너 뛰는 일뿐입니다.
나는 Entity Framework가 모델을 구축하고 나서 그것을 방출하거나 something으로 저장한다고 가정합니다. 따라서 ModelCreating을 호출 할 필요가 없다고 생각합니다. this answer에 따르면 Entity Framework (4.0 현재)는 모델을 캐시하지만 동일한 AppDomain 내에 새로운 DbContext를 만들 때만 다시 사용합니다. 그렇다면 모델이 손상 될 수있는 요인은 무엇입니까? 어떻게하면 Application_OnStart에서 모델을 다시 빌드 할 수 있습니까?