2013-06-18 3 views
1

내 데이터베이스의 두 테이블 사이에 많은 관계가 있으므로, 내 edmx 모델에는 두 개의 테이블 만 있고 중간 테이블은 없습니다. 이 테이블은 영화 및 장르입니다.많은 관계가 많습니다 많은 객체가 포함되어 있습니다

일부 영화를 검색 할 때 관련된 엔티티도 함께 제공되므로 열심히로드 할 때 엔티티 Movies의 Genres 콜렉션을 채 웁니다. 내가 원하는거야.

결과적으로 두 개 이상의 동영상이있는 경우 엔티티 MOvies의 컬렉션 장르가 채워 지지만 엔터티 Genres의 컬렉션 영화도 채워지는 것이 문제입니다. 따라서 저장소에 하나의 동영상을 보내 업데이트 할 때 엔티티를 컨텍스트에 첨부하면이 영화와 내가 업데이트하려는 영화와 동일한 장르를 가진 모든 영화를 첨부합니다. 이는 엔티티 장르에 내가 업데이트하려는 영화와 동일한 장르의 영화가 포함되어 있기 때문입니다.

첫 번째 검색에서 많은 영화를 얻는다면 하나의 영화를 업데이트 할 때 시드 할 필요가없는 엔티티를 많이 보내므로 네트워크에서 많은 트래픽이 발생합니다.

결과를 검색 할 때 장르 엔티티의 영화 모음이 채워지지 않은 방법이 있습니까? 왜냐하면 나는 단지 내 주요 엔터티, 영화의 관련 엔티티 만 채우기 때문에.

SQLite 및 EF 4.4를 사용하고 있습니다. 장르 추적을 사용하지 않도록 mergeOption을 찾으려고 시도하지만 찾지 못합니다.

감사합니다.

+1

"* 많은 엔티티를 보냅니다." "..."* 네트워크에서 많은 트래픽이 발생합니다. * ": ** 엔티티를 ** 보내고 네트워크에서이 트래픽은 무엇입니까? EF 클라이언트와 데이터베이스 사이에는 엔티티가 전혀 보내지지 않고 SQL 문과 열/행 데이터 만 전송됩니다. 역 네비게이션 속성이 채워지면 데이터 양이 변경되지 않습니다. 아니면 (웹) 서비스 경계 또는 그와 비슷한 것을 통해 엔티티 그래프를 이동시키는 * "네트워크"*를 의미합니까? – Slauma

답변

1

엔티티 및 관계 (논리적 디자인)를 디자인 할 때 두 엔티티 간의 다 대다 관계를 설명 할 수 있습니다. 데이터베이스 (물리적 디자인)에서 이러한 엔티티와 이들의 관계를 구현해야하는 경우 두 테이블만으로 엔티티와 관계를 구현할 수 없습니다. 관계를 표현하기 위해서는 중간 테이블이 필요합니다.

두 엔티티 간의 일대 다 관계는 각 엔티티에 대한 테이블 만 필요합니다 (단순 외래 키 관계). 따라서 장르 테이블이 주어진 영화의 장르 목록 일 뿐이라면 일대 다 (영화는 부모로, 장르는 자식으로) 일 것입니다. 그건 효과가있을거야.

그러나 장르가 영화와 다 대 다 관계에 있다고 설명 했으므로 장르는 일종의 "선택 목록"을 제공하는 데 사용되어야한다고 제안합니다. 즉 장르의 한 행은 관련이 없습니다 영화의 특정 행에 연결되지만 모든 영화와 관련 될 수 있습니다 (반대의 경우도 마찬가지 임). 이 관계를 작동 시키려면 중간 테이블이 필요합니다. 영화의 기본 키와 관련된 외래 키와 장르의 기본 키와 관련된 외래 키라는 두 개의 열만 있으면되는 "moviegenres"라고 부르 자고합니다. 이 테이블은 실제로 다 - 대 - 다 관계를 표현하고, 영화에 장르를 할당하는 것은 "moviegenres"에 행을 추가하여 수행됩니다.

데이터가 채워지는 방법에 대한 문제를 고려하기 전에 논리적 - 물리적 디자인 문제를 먼저 해결해야합니다.

+0

네, 제 데이터베이스에는 세 개의 테이블, 두 개의 테이블과 moviesgenres가 중간 테이블로 있고 두 테이블의 FK 만 있습니다. 그래서 저는 두 개의 엔티티, 영화 및 장르 만 가질 수 있지만 영화는 아닙니다. 장르. 나는 영화의 엔티티 컬렉션에 장르를 가지고 있으며 그 반대도 마찬가지입니다.문제는 EF가 쿼리를 실행할 때 모든 컬렉션을 채 웁니다. EF는 영화에서 장르 컬렉션을 채우고 장르에서는 영화 컬렉션을 채 웁니다. 따라서 하나의 영화에는 영화가있는 영화 모음이있는 장르 컬렉션이 있습니다. 그래서 나는 단지 하나만 업데이트 할 때 많은 엔티티를 보냅니다. –

관련 문제