2014-02-05 3 views
2

최근 다양한 신경 네트워크 애플리케이션을 시뮬레이션하기위한 프로젝트를 시작했습니다. 상당량의 데이터를 처리하기 위해 Entity Framework Model 첫 번째 방법을 사용하여 SQL Server 백엔드를 구현했습니다.
또한 TDD (Test Driven Development) 분야도 상당히 좋아졌습니다. 그러나 그렇게하기 위해서는 테스트를 실행하기 위해 모의 데이터베이스가 필요합니다. 많은 검색을 한 후에 상업용 및 오픈 소스 용 솔루션을 여러 개 발견했습니다. 이 시점에서 데이터베이스 관련 과목에 관해서는 초보자라는 사실에 주목할 필요가 있습니다. 결과적으로 저는 here과 같이 EF6 프레임 워크의 메모리 모의에 설명 된 msdn을 사용하기로 선택했습니다.조롱 된 EF6 데이터베이스에 외래 키로 관련 데이터로드

PFF는, 지금 우리는 여기에, 비켜 배경을 가지고 내 질문 : 내 모델을 생성하고 그것에서 데이터베이스를 생성 한

. 실제 인터페이스 계층의 코드 생성은 edmx에 의해 수행됩니다. 단위 테스트에서는 위의 자습서를 따라 데이터베이스 모델과 일치하는 관련 필드를 수정했습니다. (불행하게도 나는 게시판에 이미지를 포함시킬 담당자가 없다는 것을 발견 할 수있다 ...).
그러나 모든 테스트에 대해 모든 데이터가 필요하지는 않으며 일부 하위 집합 만 필요합니다. 나는 어떤 테이블을 종속성을 로딩 할 것인지에 대한 깊이를로드 할 테스트의 설정에서 지정할 수있는 상황을 원합니다.

관련된 외래 키를 지정할 때 관련된 데이터가 현재 DBSet과 함께로드되지 않았다는 문제가 발생했습니다. 이 예에서

var context = new TestContext(); 

context.NodeSet.Add(new Node { NodeID = 1 }); 
context.NodeSet.Add(new Node { NodeID = 2 }); 

context.ConnectionSet.Add(new Connection { ConnID = 1, ToNodeID = 1, FromNodeID = 2 }); 

var conn = context.ConnectionSet.First(); 
var fromNode = conn.FromNode; 
var toNode = conn.ToNode; 

지정된 연결 반환의는 Fromnode 속성을 예를 들어 내가 노드 세트의 경우 요소에서 관련 데이터 링크 항목을 원하는 설정 연결에 대한 데이터를 설정할 때 없는. 원하는 상황은 모의 객체가 ToNodeID 키를 관련 객체와 관련시키는 능력을 갖는다는 것입니다. 또한 로딩의 순서는 i.a.w. FromNode 필드를 해결하려면 해당 노드가 있어야합니다.

이 특정 질문에 관한 모든 제안에 열려 있지만, EF6 모델의 첫 번째 데이터베이스 디자인을 조롱하는 더 건설적인 방법을 알고있는 사람도 있습니다.

미리 감사드립니다.

+0

이것은 단지 제안 일 뿐이지 만 기본 POCO 노드 대신 노드의 하위 클래스를 사용할 수 있으며 하위 클래스는 id로 관련 클래스를 참조하도록 탐색 속성을 수동으로 구현합니다. –

+0

유효한 제안이지만 모의 객체가 내비게이션 프로퍼티와 관련 객체 사이의 관계를 인식하고 싶습니다. 그렇지 않으면 수동으로 내 데이터베이스의 모든 테이블에 대한 하위 클래스를 만들고 탐색 속성을 구현해야합니다. 제안을 주셔서 감사합니다. 나는 그것을 뒤집기로 사용할 것입니다. – Bermudian

+0

당신이 똑똑하다면 Add 메서드를 조롱하면 Add를 통해 내부적으로 성 프록시 (castle proxy 등)를 사용하여 래핑하고 내부 컬렉션에 래핑을 추가 할 수 있습니다. 나는 그것을 시도한 적이 없으며 곧 그것을 할 계획이며 또한 이것에 대한 알려진 접근법이 있는지 궁금해한다. –

답변

1

문제를 논의하고 다시 생각한 후에 가장 쉬운 방법은 자동 해결을 잊어서 ID을 입력하는 것이 아니라 테스트 전에 수동으로 참조를 설정하는 것입니다. 즉

, 당신은 당신이 가지고

public class Child 
{ 
    public int ID_PARENT { get; set; } 
    public virtual Parent Parent { get; set; } 
} 

는 다음 데이터와 모의 객체를 설정할 수 있도록 하나의 부모에게 두 dbsets, ChildParent 각 자식 엔티티 지점이있는 경우

var mockedContext = ... ; // create mocked context with mocked DbSets as 
          // shown in the article you refer to 

Child c = new Child(); 

Parent p = new Parent(); 
c.Parent = p; // set up the relation manually 

mockedContext.Child.Add(c); 
mockedContext.Parent.Add(p); 

// property resolving works now as you have set it up in an explicit way 
// note that IDs are irrelevant 
var children = mockedContext.Child.Where(c => c.Parent != null && c.Parent.Name.StartsWith("n"));