Effort에서 외래 키 참조를 해제하십시오.

c# effort

문제

Visual Studio와 C #에서 Effort를 사용하여 데이터베이스를 다시 만들고 단위 테스트합니다. 하나의 테이블에 대한 클래스를 작성 중이므로 해당 테이블의 오브젝트로만 데이터베이스를 채우고 있습니다. 내 문제는 Effort 데이터베이스가 개체의 외래 키가 데이터베이스의 실제 개체를 참조하기를 원한다는 것입니다.

내 오류는

System.Data.Entity.Infrastructure.DbUpdateException : 항목을 업데이트하는 동안 오류가 발생했습니다. 자세한 내용은 내부 예외를 참조하십시오.

System.Data.Entity.Core.UpdateException : 항목을 업데이트하는 동안 오류가 발생했습니다. 자세한 내용은 내부 예외를 참조하십시오.

System.Reflection.TargetInvocationException : 호출 대상에 의해 예외가 발생했습니다.

NMemory.Exceptions.ForeignKeyViolationException : 외래 키 위반 [Table1 :: SettingsId]. 키 값 [0]이 (가) 참조 된 테이블 [Table2 :: SettingsId]에 없습니다. 오류 코드 : RelationError

이 테이블에는 많은 다른 외래 키를 가진 객체에 많은 외래 키가 있으므로 많은 작업이 필요합니다. 이 테이블을 혼자 테스트 할 수 있도록이 기능을 끄는 방법이 있습니까?

수락 된 답변

나는이 문제에 부딪쳤고 큰 데이터베이스의 범위에서 테이블을 테스트하기를 원했다. 필요한 모든 것을 인스턴스화하고 참조로 데이터베이스 또는 테이블을 결과로 전달하는 도우미 메소드를 작성할 수 있습니다. 필요한 시험 방법 / 수업에서 필요할 때 언제든지 전화 할 수 있기 때문에 도움이됩니다.


인기 답변

테스트 전용으로 데이터베이스에서 새로운 .edmx 파일을 만들 수 있습니다. 예 :

Visual Studio에서 파일 -> 새로 만들기 -> 데이터 -> 엔터티 데이터 모델을 선택합니다. "데이터베이스에서 EF 디자이너"를 선택하십시오. 기존 SQL Server 데이터베이스에 대한 연결을 선택하거나 만들어 app.config의 연결 설정을 "testConnectionString"으로 저장합니다.

데이터 모델 디자이너에서 필요없는 외래 키 관계를 제거하십시오. 디자이너를 저장하고 프로젝트를 다시 작성하십시오.

Effort에서 다음과 같이 CreateTransient 메서드에 연결 문자열 (새 .edmx를 만들 때 생성됨)의 이름을 전달합니다.

EntityConnection connection = Effort.EntityConnectionFactory.CreateTransient("name=testConnectionString");

MyDbContext context = new MyDbContext(connection);

이렇게하면 관련 외래 키 테이블을 채울 필요없이 테이블에 값을 삽입 할 수 있습니다.

이것은 경고와 함께 제공됩니다. 테스트중인 코드가 외래 키에 의존하는 탐색 속성을 사용하면 실패합니다. 이것은 내가 이런 종류의 "단위 테스트"가 실제로 얼마나 가치 있는지 궁금하게 만든다.




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