2016-07-20 2 views
4

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

내 오류가

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

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

System.Reflection.TargetInvocationException : 예외가 호출 대상에 의해 throw되었습니다.

NMemory.Exceptions.ForeignKeyViolationException : 외래 키 위반 [Table1 :: SettingsId]. 키 값이 [0]이 아닌 참조 테이블에 존재 않습니다 [표 2 :: SettingsId] .. 오류 코드 : RelationError이 특정 테이블이 필요 많은 외국 키가 개체에 많은 외국 키가 기본

많은 일. 이 테이블을 혼자 테스트 할 수 있도록이 기능을 끄는 방법이 있습니까?

답변

1

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

0

표는 혼자가 아닙니다. 테이블 만 원하는 경우 새 테이블을 디자인하고 .sql 스크립트를 사용하여 제약 조건 및 참조를 삭제하십시오. Entity Framework를 사용할 때 인서트를 모의하는 것은 비교적 쉽지만 꽤 힘들 수 있습니다.

0

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

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

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

노력의 일환으로,이처럼 CreateTransient 방법으로 연결 문자열의 이름을 (새 .edmx을 만들 때 생성 된) 통과 : 이것은 당신이에 값을 삽입 할 수 있도록해야

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

MyDbContext context = new MyDbContext(connection); 

테이블과 관련된 외부 키 테이블을 채울 필요가 없습니다.

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