2011-04-20 3 views
2

나는 디자인과 씨름하고 있으며 접근하는 가장 좋은 방법을 찾아 내려고 노력하고 있습니다.Entity Framework DataContexts

우리는 많은 테이블을 가지고 있으며, 현재의 LinqToSql 구현에서 DBML은 크기가 매우 크고 다루기 힘듭니다. 나는이 상황을 재현하는 것을 피하고 싶습니다. 우리는 사용자 단위로 연결 문자열을 결정하므로 다른 테이블 그룹에 대해 별도의 dbml을 작성하는 것은 매우 어렵습니다.

필자는 Entity Framework를 사용하도록 설정했지만 코드 첫 번째 요소는 필요하지 않지만 전 세대가 아닌 경량 코드를 선호하므로 시각적 매핑이 필요하지 않으므로 모든 테이블에 대한 코드 파일을 생성 한 다음 DbSets로 DataContext에 추가합니다.

이것은 내가 여기서 가장 좋은 방법을 생각해 봤고 나는 그 질문을하고 싶었다.

사용하려는 모든 테이블 그룹에 대해 DataContext를 만드는 것이 좋습니다. 나는. 나는 모듈을 가지게 될 것이고, 그것은 5 개의 테이블로부터 데이터를 수집 할 책임이있을 것이고, 데이터베이스의 모든 단일 테이블을 필요로하지는 않는다. 단지 5 개이다.이 5 개의 테이블을 포함하는 DbContext를 생성 하는가? 나중에 더 필요하면 추가 할 수 있지만 가볍습니다.

답변

1

테이블의 각 그룹마다 별도의 컨텍스트가있을 수 있지만 모델이 너무 크거나 이질적인 도메인 인 경우 추상화 계층을 추가 할 수 있습니다. 이것은 전체 모델을 포함하는 단일 컨텍스트를 갖는 다음 repository pattern 행을 따라 무언가를 추가하는 것을 의미합니다. This은 EF로이를 달성하는 데 쓸만한 글입니다.

이렇게하면 기본적으로 데이터 계층을 추상화하여 구현 문제를 해결하는 두 가지 목표를 달성 할 수 있습니다. 개발자가 필요로하는 엔티티 (aggregate root)로 작업 할 수 있도록합니다.

나는 분명히하고 싶습니다. 특정 엔드 투 엔드 아키텍처 (즉, DDD)를 사용한다고 반드시 제안하지는 않습니다. 내가 여기서하려고하는 것은 프로젝트를 진행하면서 실수를 할 수있게 해주는 유연성을주는 패턴을 제안하는 것입니다.

+0

감사합니다. 더 많은 독서! :) – Hammerstein

1

당신은 확실히 이것을 할 수 있습니다. Linq2SQL에서와 같이 edmx 모델에 테이블을 추가하기 만하면 5 개의 테이블을 추가하기 만하면 추적되지 않은 다른 테이블에 대한 엔티티 추적을위한 오버 헤드를 줄일 수 있습니다. Entity Framework는 Linq2SQL에도없는 양방향 탐색 속성을 추가합니다. Linq2SQL 대신 EF를 사용하는 것이 좋습니다.

1

큰 DBML 모델에 대한 본질적으로 나쁜 점은 없지만 성능 영향은 EF에서는 무시해도 좋습니다.

다른 한편으로 복잡성을 줄이는 것은 Entity Framework에도 적용됩니다. 코드에서 데이터베이스의 5 개 테이블 만 필요로하는 경우 해당 5 개 테이블에 대한 엔터티 만있는 별도의 컨텍스트를 만드는 것이 좋습니다. 완전히 독립된 테이블을 별도의 컨텍스트로 분해함으로써 이러한 구분을 분명한 방법으로 표현합니다.이 테이블과 데이터베이스의 다른 테이블과의 종속 관계는없고 코드와 관련이없는 엔티티와의 종속성이 없습니다. 그리고 다른 의견이있을 수 있습니다) 이것은 갈 길입니다.

그러나 다른 컨텍스트에서 이러한 테이블 중 일부가 필요하면 해당 컨텍스트에도 해당 엔터티를 넣어야한다는 것을 명심하십시오. 같은 테이블이 여러 컨텍스트 또는 심지어 존재하는지 이해하기 어려울 수 있습니다 컨텍스트간에 상호 종속성이 있습니다. 그것은 복잡성을 추가하기 때문에 피해야합니다.

+0

고마워요, 제게 많은 도움이됩니다. 시간과 에너지를 낭비하지 않습니다. – Hammerstein