2013-06-17 2 views
1

우리는 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에서 모델을 다시 빌드 할 수 있습니까?

답변

1

다른 코드가 있지만 주로 Entities와 EntityModelConfiguration 클래스를 별도의 프로젝트 (너무 많았 음)로 분리했기 때문에 주로 ASP.NET 런타임에서로드됩니다. 어셈블리를 다른 순서로 배치하고 때로는 아직로드하지 않았을 수도 있습니다. 그래서 this answer을 사용하여 응용 프로그램을 시작하는 동안 my/bin 폴더에서 모든 어셈블리를 미리로드합니다.

관련 문제