2012-04-10 27 views
10

Mam typ jednostki o nazwie Obraz, który dziedziczy z publikacji (istnieje 5 innych typów publikacji, wszystkie mają 10 wspólnych właściwości).Podział tabel na dziedziczony typ jednostki?

Niestety, tabela obrazów w mojej bazie danych zawiera 4 kolumny binarne z danymi dla 4 wersji obrazu w różnych rozdzielczościach, więc istnieją 4 właściwości typu obrazu EF: BinOriginal, BinHiRes, BinLowRes, BinThumbnail, które zawierają bardzo duże ilości danych.

Wpływa to na wydajność. Nie chcę przechwytywać wszystkich danych binarnych, gdy generuję tylko serię linków do obrazów, na przykład.

Więc próbowałem dzielenie stołu, umieszczając pola binarne 4 do nowego podmiotu imagefile restauracja a la: http://blogs.msdn.com/b/adonet/archive/2008/12/05/table-splitting-mapping-multiple-entity-types-to-the-same-table.aspx

mam zapewniony prawidłowy table-mapping, dodano związek 1-1 i obejmowały ograniczenie referencyjne, ale ja dostaję ten błąd:

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. 

... wydaje się, że jest to problem, że stół rozdzielona jest zaangażowany w stosunku spadkowego.

Próbowałem dziedziczy nowy typ imagefile EF niepublikowanie, ale wtedy pojawia się błąd:

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

PYTANIE Czy istnieje sposób wokół tego, czy też fakt, że potrzeba mi obrazu Typ EF do dziedziczenia z publikacji wyklucza dzielenie innych pól na nowy typ?

+1

Czy można zmienić schemat bazy danych? To znaczy. zrobić oddzielną tabelę dla obrazów? –

+0

Tak: właśnie to zrobiłem jako "obejście" (to w rzeczywistości lepszy projekt DB, ale było znacznie więcej pracy, biorąc pod uwagę, że DB jest już w produkcji). Moje pytanie o podział na stoły nadal trwa - nadal jest to aspekt EF, który chcę zrozumieć. Jeśli możesz zweryfikować/udokumentować, że nie można podzielić tabeli, która jest podtypem w relacji dziedziczenia, wystarczy, że zaakceptuję odpowiedź. – Faust

+0

OK, rozumiem, ale nie jestem pewien, czy mam zamiar zagłębić się w to :). –

Odpowiedz

1

Możesz uznać to za ograniczenie Entity Framework: w rzeczywistości są dwa elementy, Model bazowego elementu bazy danych i Entity, który jest zbudowany z Modelu. Podklasa Jednostki nie ma żadnego wpływu na Model.

Jeśli nie chcesz, aby załadować wszystkie dane do rzędu modelu, projekt go:

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

zapytanie SQL Entity Framework tworzy tylko wybiera kolumn w klauzuli select Zapytanie LINQ.

Zachowuje to także Entity Framework od przechowywania wiersza tabeli do obiektu ObjectContext (lub DBContext dla EF 5).

Na marginesie, byłbym osobiście kuszony, aby przechowywać duże dane binarne w rozwiązaniu NoSQL i po prostu utrzymywać powiązany klucz w bazie danych SQL samodzielnie.