2012-04-10 2 views
10

출판물에서 물려받은 Image라는 엔티티 유형이 있습니다 (5 가지 다른 유형의 출판물이 있으며 모두 10 가지 공통 속성을 공유합니다).상속 된 엔티티 유형의 테이블 분할?

불행히도 내 DB의 이미지 테이블에는 4 가지 버전의 이미지에 대한 데이터가 포함 된 4 개의 이진 열이 서로 다른 해상도로 포함되어 있으므로 포함하는 BinOriginal, BinHiRes, BinHiRes, BinLowRes, BinThumbnail의 4 가지 속성이 있습니다. 매우 많은 양의 데이터.

이것은 성능에 영향을줍니다. 예를 들어 일련의 이미지 링크를 생성 할 때 이진 데이터를 모두 포착하고 싶지는 않습니다.

그래서 나는 새로운 ImageFile 엔티티 라로 사 개 진 필드를 배치, 테이블 분할을 시도했다 : 나는 올바른 테이블 매핑을 보장 한 http://blogs.msdn.com/b/adonet/archive/2008/12/05/table-splitting-mapping-multiple-entity-types-to-the-same-table.aspx

, 1-1 연결을 추가하고 포함 참조 제한 조건,하지만 난이 오류를 받고 있어요 :

Error 3033: Problem in mapping fragments starting at line 2731:EntitySets 
'ImageFiles' and 'Publications' are both mapped to table 'Images'. Their primary 
keys may collide. 

를 ... 상속 관계에 참여하는 테이블 인 분할에 문제가있어 보인다.

내가 출판의 새로운 ImageFile EF 유형을 상속 시도했다, 그러나 나는 오류 얻을 :

Problem in mapping fragments starting at lines 2332, 2374:Two entities with 
different keys are mapped to the same row 

질문이 주변에 어떤 방법이 있나요, 아니면 제가 이미지를 필요로한다는 사실을한다 발행물에서 상속하는 EF 유형은 다른 필드를 새로운 유형으로 분리하지 못하도록합니까?

+1

데이터베이스 스키마를 변경할 수 있습니까? 나는. 이미지를위한 별도의 테이블을 만드시겠습니까? –

+0

예 : 지금은 "work-around"(실제로는 더 나은 DB 디자인이지만, DB가 이미 생산 중이므로 훨씬 더 많은 작업이있었습니다)입니다. 테이블 분리에 관한 제 질문은 여전히 ​​중요합니다. 이해해야하는 부분은 EF입니다. 상속 관계에있는 하위 유형 인 테이블을 분할 할 수 없다는 것을 확인/문서화 할 수 있다면 대답을 받아 들일 만만 큼 충분할 것입니다. – Faust

+0

좋아, 이해하지만, 나는 그것에 대해 파헤쳐 야할지 잘 모르겠다. :) –

답변

1

Entity Framework의 제한 사항으로 간주 할 수 있습니다. 실제로는 기본 데이터베이스 항목의 모델과 모델에서 빌드하는 엔터티의 두 가지가 있습니다. Entity의 서브 클래스는 모델에 영향을주지 않습니다.

당신이 모델의 행에 대한 모든 데이터를로드 할 수없는 경우, 프로젝트를 :

var results = from product in myDB.Products 
       where product.Id == productId 
       select New 
       { 
        Id = product.Id, 
        Name = product.Name, 
        ImageUrl = product.ImageUrl 
       }; 

엔티티 프레임 워크 만 작성하는 SQL 쿼리가의 select 절에 열을 선택 LINQ 쿼리.

이렇게하면 Entity Framework가 테이블 행을 ObjectContext (또는 EF 5의 경우 DBContext) 개체에 저장하지 못하게합니다.

부수적으로, 저는 개인적으로 NoSQL 솔루션에 largish 바이너리 데이터를 저장하고 SQL 데이터베이스에서 관련 키를 직접 유지하려고합니다.