Effort 프레임 워크와 함께 단위 테스트에서 기존 데이터베이스를 사용할 수 없습니다.

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

문제

Entity Framework 6에서 Effort 프레임 워크를 사용하여 Azure SQL에서 호스팅되는 데이터베이스를 사용하여 테스트를 작성하려고합니다.

다음 코드를 실행하면 예외가 발생합니다.

[ClassInitialize]
public static void ClassInitialize(TestContext context)
{
    EffortProviderConfiguration.RegisterProvider();
}

[TestMethod]
public void TestMethod1()
{
    const string connectionString = "Data Source=***;Initial Catalog=my_catalog;User ID=user;Password=password;provider=System.Data.SqlClient";
    IDataLoader loader = new EntityDataLoader(connectionString);
    using (var ctx = new UsersDbContext(Effort.DbConnectionFactory.CreatePersistent("cool", loader)))
    {
        var usersCount = ctx.Users.Count();
    }
}

Count() 실행에서 throw 된 예외 :

Effort.Exceptions.EffortException : '테이블'테이블의 내용을 초기화하는 동안 처리되지 않은 예외 ---> System.ArgumentException : 키워드가 지원되지 않습니다 : '데이터 원본'.

EffortProviderConfiguration.RegisterProvider() 를 app.config 설정으로 바꾸면 동일한 예외가 발생합니다.

UsersDbContext 를 만들기 위해 정확히 동일한 연결 문자열을 사용하면 성공하고 데이터에 액세스 할 수 있습니다. 또한 연결 문자열없이 Effort 지속성 또는 일시적 모드로 컨텍스트를 만드는 것도 잘 작동합니다.

실제 DB에서 기존 데이터와의 연결을 초기화하려면 어떻게해야합니까?

인기 답변

나 같은 경우에는 연결 문자열을 사용하지 않는 이유 (즉 메모리 내 데이터베이스에서 작동하므로 직접 컨텍스트에 연결을 제공해야하는 이유)에 대해 혼동스러워 할지라도 설명서를 통해 조금 더 명확 해집니다. Entity Framework의 데이터베이스 우선 또는 모델 우선 변형을 사용하는 경우에만 필요합니다. Entity 연결 문자열이 스키마를 작성할 수 있도록 모델을 찾기 위해 필요한 정보를 제공하기 때문입니다. 따라서 연결 문자열의 서버 / 데이터베이스 / 사용자 ID / 비밀번호 부분을 더미 이름으로 안전하게 채울 수 있습니다.

이것은 또한 커스텀 디폴트 DbConnectionFactory 접근법이 코드 - 우선 (code-first)에 대해서만 작동한다는 것을 분명히합니다. 이것은 처음 몇 시간 동안의 에러를 설명합니다 ... 모델 우선 또는 데이터베이스 우선 엔티티 연결을 엔티티 클래스에 주입해야합니다 여기에 설명 된대로

유용한 팁 - 생성 된 엔티티 모델 클래스가 부분 클래스이기 때문에 동일한 어셈블리에 다른 코드 파일을 만들고 동일한 네임 스페이스를 부여하여 부분 클래스로 만들 수 있으며이 코드 세트를 설정하는 데 필요한 두 번째 생성자를 추가 할 수 있습니다. 대신 엔티티 모델을 수정 / 재 작성하면 사용자 정의 생성자가있는 코드가 t4 템플리트에 의해 삭제되지 않습니다.




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