2009-03-19 10 views

Odpowiedz

6

Roztwór utworzyć oddzielną tablicę z polem varbinary i uczynić związek 1-do-1 pomiędzy tabelach

+0

Nie zawsze jest to możliwe na istniejącym schemacie, ale prawdopodobnie jest to najprostsze podejście, gdy jest to możliwe. Zrobiłem to, z obcym kluczem do "drugorzędnego" stołu w moim "głównym stole", sprawdzając, czy FK ma wartość zerową, czy też nie pozwala na szybkie poznanie, czy zapis "drugorzędny" nie musi go faktycznie ładować. – AFract

1

Jednym ze sposobów byłoby projektu Twój wynik ustawiony na typ anonimowy kiedy nie trzeba blob:

from entity in context.Entities 
select new 
{ 
    Field1 = entity.Field1, 
    Field2 = entity.Field2 
} 

W tym przykładzie, tylko Pole1 i Pole2 zostanie załadowany.

Ta metoda ma tę wadę, że nie można zaktualizować zwróconej instancji i wykonać context.SaveChanges. Chociaż twierdzę, że zapisanie instancji bez pełnej wiedzy o instancji jest na granicy niebezpiecznej. Ta metoda jest dobra, gdy chcesz mieć długą listę zwracanych instancji, ale będzie to zapytanie o pojedynczą instancję, zmienne pole i wszystko, zanim faktycznie zaktualizujesz.

+0

Dziękujemy za pomoc. Szukałem czegoś podobnego do leniwego ładowania pola varbinary :) ale wydaje się, że nie jest to możliwe. – Emil

4

nie jest koniecznie tworzyć oddzielną tabeli. Powinieneś zrobić kilka kroków. Załóżmy, że mamy tabelę "Dokumenty" (Id, Nazwa, Dane (varbinary)).

  1. Otwórz projektanta EF, skopiuj i wklej jednostkę "Dokument".
  2. Zmień nazwę na "DocumentData". Dodaj mapowanie do tabeli "Dokumenty".
  3. Usuń właściwość "Dane" w encji "Dokument".
  4. Usuń właściwość "Nazwa" w encji "DocumentData".
  5. Kliknij prawym przyciskiem myszy encję "DocumentData" i dodaj nowe powiązanie. Wybierz powiązanie 1 do 1 z jednostką "Dokument".
  6. Wybierz nowe powiązanie, przejdź do Właściwości, kliknij "..." w polu "Więzy referencyjne", wybierz jednostkę "Dokument" jako główną, pozostaw wszystko jako domyślną (Id -> Id) i kliknij OK.

Teraz zbuduj projekt.

UWAGA. Teraz podczas tworzenia nowego podmiotu „dokument” należy również utworzyć nowy podmiot „DocumentData”, nawet jeśli nie chcesz, aby umieścić jeszcze żadnych danych:

Document doc = new Document(); 

doc.Name = "My document"; 
doc.DocumentData = new DocumentData(); 

context.Documents.Add(doc); 
context.SaveChanges(); 
0

Tabela podziału. Entity Developer narzędzie pozwala wykonać to wizualnie. Możesz odwzorować swój podmiot na różne tabele.

1

Powinieneś usunąć swoje zmienne pole ze stołu i umieścić je w innej tabeli, tworząc między nimi jeden do jednego. To jest dobra praktyka, ponieważ można łatwo wdrożyć leniwy załadunek i inne rzeczy ..

Powiązane problemy