2012-04-19 14 views
8

Zajmuję się tworzeniem aplikacji do przechowywania plików i dodaliśmy typ FileStream do naszej bazy danych. Oczekuje się, że system będzie obsługiwał duże pliki. Jedna część aplikacji pozwala na przesyłanie zbiorcze wielu dokumentów. Dokumenty te muszą następnie zostać połączone z innymi podmiotami w systemie.Jak uniemożliwić Entity Framework załadowanie kolumny FileStream do tablicy bajtów?

Jedna strona służy do wyświetlania niepowiązanych dokumentów, aby umożliwić użytkownikowi łączenie dokumentów pojedynczo z podmiotami. Po przeprowadzeniu testów obciążenia procesu przesyłania, okazało się, że ślad pamięci procesu roboczego ASP.NET wzrósł do ponad GB podczas ładowania strony Unlinked Documents.

Po przeprowadzeniu dochodzenia wydaje się, że Entity Framework ładuje cały encję wiersza dokumentu (łącznie z FileStream, przekonwertowaną na tablicę bajtów) dla setek niepowiązanych dokumentów. W mojej klasie repozytoriów nie zapisuję tablicy bajtów podczas konwersji do modelu, ale wtedy jest już za późno. EF spędził czas i pamięć, aby przydzielić tablicę bajtów do reprezentacji klasy Repozytorium.

Czy istnieje sposób, że mogę powiedzieć EF, aby nie ładować tej tablicy bajtów, chyba że ja jawnie o to poprosić?

+1

http://stackoverflow.com/a/3293286/782754 nie jest możliwe, aby oznaczyć właściwość dla leniwych załadunku, ale można użyć innych pojęć –

Odpowiedz

11

Garrison, możesz użyć funkcji o nazwie "Podział jednostki", w której mapujesz dwie powiązane jednostki do pojedynczej tabeli. Więc w pierwszym byście mielibyście wszystko oprócz właściwości filestream. W 2. encji masz klucz podstawowy (taki sam jak w pierwszej encji) i właściwość filestream. Utwórz jedną: jedną relację między elementami w modelu, a następnie zmapuj obie jednostki do tej samej tabeli. Teraz encja z strumieniem pliku jest powiązana i możesz ją załadować lub wczytać w razie potrzeby. Jedynym minusem jest to, że nie jest to własność twojej głównej jednostki, więc musisz przejść do powiązanego obiektu, a następnie do właściwości.

myEntity.MyRelatedEntity.TheFileStreamProperty

Oto old blog post pisałem, że pokazuje, jak to zrobić w kreatorze EDM.

Można również uzyskać to samo odwzorowanie przy użyciu funkcji Code FIrst. Oto artykuł MSDN, który napisałem, zawierający artykuł podziału encji. http://msdn.microsoft.com/en-us/data/hh272551

HTH Julie

+0

dzięki, Julie. Tego właśnie szukałem! –

+0

świetnie się słyszeć! :) –

Powiązane problemy