UnintentionalCodeFirstException | Database First를 사용하여 Effort.Ef6을 사용하여 Entity Framework 단위 테스트

c# effort entity-framework entity-framework-6 unit-testing

문제

그 상황

엔티티 프레임 워크 6을 기반으로하는 DbContext 의 단위 테스트를 사용하고 싶습니다. 데이터베이스 접근 방식으로 내 DbContext 와 모델을 만들고 이제 .edmx 디자이너 파일을 가지고 있습니다.

문제

자동으로 생성 된 DbContext 는 다음과 같이 DbContext.OnModelCreating 메서드를 재정의합니다.

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    throw new UnintentionalCodeFirstException();
}

이 기사 의 정보를 기반으로 한 조롱 된 데이터 액세스 서비스에서 내 DbContext 의 새 인스턴스를 만들려고합니다. 내 코드가 Database.SetInitializer; 로 실행되지 않습니다 Database.SetInitializer; 이 블로그 포스트의 저자처럼 지적했다. 제 생성자는 정확히 그의 생성자와 같습니다. 내 DbContext 초기화는 다음과 같습니다.

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    throw new UnintentionalCodeFirstException();
}

앞서 언급 한 재정의 된 OnModelCreating 도달하면 다음 예외가 발생합니다.

System.Data.Entity.Infrastructure.UnintentionalCodeFirstException : '데이터베이스 우선 또는 모델 우선 개발을 위해 EDMX 파일에서 생성 된 코드와 함께 코드 우선 모드에서 컨텍스트가 사용되고 있습니다. 이것은 올바르게 작동하지 않습니다. 이 문제를 해결하려면이 예외를 throw하는 코드 줄을 제거하지 마십시오. 데이터베이스 우선 또는 모델 우선을 사용하려면 Entity Framework 연결 문자열이 시작 프로젝트의 app.config 또는 web.config에 포함되어 있는지 확인하십시오. 자체적 인 DbConnection을 만드는 경우 EntityConnection이고 다른 유형의 DbConnection이 아니라 EntityConnection이고 DbConnection을 사용하는 기본 DbContext 생성자 중 하나에 전달해야합니다. 코드 우선, 데이터베이스 우선 및 모델에 대해 자세히 알아 보려면 먼저 Entity Framework 설명서를 참조 하십시오. http://go.microsoft.com/fwlink/?LinkId=394715 '

stackoverflow에 대한 질문은 데이터베이스 첫 번째 apporach를 사용하는 동안 노력으로 단위 테스트에 초점을 맞추지 만, 아무도 나 같은 비슷한 문제가없는 것 같습니다.

내가 이미 시도한 일

  • 해결책을 찾기 위해 오랜 시간 인터넷 검색.
  • 재정의 된 OnModelCreating() 주석 처리를 제거하십시오.
  • 나는 이미 성공없이이 해결책 을 적용하려고 노력했다.
  • Moq을 사용 하여 내 DbContext 를 모의 DbContext .

질문

메모리 내 데이터베이스를 만들고 사용하려면 어떻게해야합니까?


추가 정보

OnModelCreating() 주석 처리를 제거하면 DataContext에 처음 액세스 할 때 예외가 발생합니다. 예 :

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    throw new UnintentionalCodeFirstException();
}

System.Data.Entity.ModelConfiguration.ModelValidationException : '모델 생성 중에 하나 이상의 유효성 검사 오류가 발견되었습니다. MyApplication.Shared.Model.KeyValuePair :: EntityType'KeyValuePair '에 정의 된 키가 없습니다. 이 EntityType의 키를 정의하십시오. KeyValuePairs : EntityType : EntitySet 'KeyValuePairs'는 키가 정의되지 않은 'KeyValuePair'유형을 기반으로합니다. '

수락 된 답변

문제는 내 KeyValuePair 데이터 집합의 키를 지정해야한다는 것이 었습니다.

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<KeyValuePair>().HasKey(x => x.Key);
    base.OnModelCreating(modelBuilder, null);
}

Robert Jørgensgaard Engdahl 대단히 감사합니다!




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.