2012-04-19 4 views
8

Ich entwickle eine Dateispeicheranwendung und wir haben den FileStream-Typ in unsere Datenbank aufgenommen. Das System wird voraussichtlich große Dateien unterstützen. Ein Teil der Anwendung ermöglicht Bulk-Uploads mehrerer Dokumente. Diese Dokumente müssen dann mit anderen Entitäten innerhalb des Systems verknüpft werden.Wie verhindere ich, dass Entity Framework eine FileStream-Spalte in ein Byte-Array lädt?

Auf einer Seite werden nicht verknüpfte Dokumente angezeigt, damit ein Benutzer die Dokumente einzeln mit Entitäten verknüpfen kann. Nach einigen Lasttests des Upload-Prozesses haben wir festgestellt, dass der Arbeitsspeicherbedarf des ASP.NET-Workerprozesses beim Laden dieser Seite für nicht verknüpfte Dokumente auf einen GB-Wert erhöht wurde.

Nach einer Untersuchung scheint Entity Framework die gesamte Dokumentzeileneinheit (einschließlich FileStream, konvertiert in ein Bytearray) für Hunderte von nicht verknüpften Dokumenten zu laden. In meiner Repository-Klasse speichere ich dieses Byte-Array bei der Konvertierung in ein Model nicht, aber dann ist es zu spät. EF hat die Zeit und den Speicher ausgegeben, um das Byte-Array der Repräsentation der Repository-Klasse zuzuordnen.

Gibt es eine Möglichkeit, dass ich EF anweisen kann, dieses Byte-Array nicht zu laden, wenn ich nicht explizit danach frage?

+1

http://stackoverflow.com/a/3293286/782754 Ist das nicht möglich, eine Eigenschaft für verzögertes Laden zu markieren, aber Sie können auch andere Konzepte –

Antwort

11

Garrison, Sie können eine Funktion namens "Entity Splitting" verwenden, bei der Sie zwei verbundene Entitäten einer einzelnen Tabelle zuordnen. In der ersten Entität hätten Sie also alle außer der Filestream-Eigenschaft. In der zweiten Entität hätten Sie den Primärschlüssel (wie in der ersten Entität) und die Filestream-Eigenschaft. Erstellen Sie eine Eins: Eins-Beziehung zwischen den Entitäten in Ihrem Modell und ordnen Sie dann beide Entitäten derselben Tabelle zu. Jetzt steht die Entität mit dem Filestream in Beziehung und Sie können sie nach Bedarf laden oder verzögern. Der einzige Nachteil besteht darin, dass es sich nicht um eine Eigenschaft Ihrer Haupteinheit handelt. Sie müssen also zur zugehörigen Entität und dann zur Eigenschaft navigieren.

myEntity.MyRelatedEntity.TheFileStreamProperty

Hier ist ein old blog post Ich schrieb, dass zeigt, wie diese Designer in der EDM zu tun.

Sie können das gleiche Mapping auch mit Code FIrst erreichen. Hier ist ein MSDN-Artikel, den ich geschrieben habe, der einen Entity Splitting-Artikel enthält. http://msdn.microsoft.com/en-us/data/hh272551

HTH Julie

+0

Danke, Julie verwenden. Genau das habe ich gesucht! –

+0

großartig zu hören! :) –

Verwandte Themen