Wie lade ich Varbinary-Felder (max) nur bei Bedarf mit ADO.NET Entity Framework?

8

Ich habe ein varbinary (max) -Feld in einer meiner Tabellen, aber ich brauche es nicht jedes Mal und ich suche nach einer Möglichkeit, es nur bei Bedarf aus der Datenbank zu holen. Ich verwende ADO.NET Entity Framework. Wie geht das?

    
Emil 19.03.2009, 16:13
quelle

5 Antworten

6

Die Lösung bestand darin, eine separate Tabelle mit dem varbinary-Feld zu erstellen und eine 1-zu-1-Beziehung zwischen den Tabellen herzustellen

    
Emil 20.03.2009, 11:44
quelle
4

Es muss nicht unbedingt eine separate Tabelle erstellt werden. Sie sollten mehrere Schritte ausführen. Nehmen wir an, wir haben die Tabelle 'Dokumente' (ID, Name, Daten (varbinary)).

  1. Öffnen Sie den EF-Designer, kopieren Sie die Entität "Document" und fügen Sie sie ein.
  2. Benenne es in "DocumentData" um. Fügen Sie eine Zuordnung zur Tabelle "Dokumente" hinzu.
  3. Löschen Sie die Eigenschaft 'Data' in der Entität 'Document'.
  4. Löschen Sie die Eigenschaft 'Name' in der Entität 'DocumentData'.
  5. Klicken Sie mit der rechten Maustaste auf 'DocumentData' und fügen Sie eine neue Assoziation hinzu. Wählen Sie eine Eins-zu-eins-Verknüpfung mit der Entität "Dokument".
  6. Wählen Sie eine neue Assoziation, gehen Sie zu Eigenschaften, klicken Sie auf '...' im Feld 'referentielle Abhängigkeit', wählen Sie 'Dokument' als Prinzipal, belassen Sie alle als Standard (Id - & gt; Id) und klicken Sie auf OK.

Erstellen Sie jetzt das Projekt.

HINWEIS. Wenn Sie jetzt eine neue Entität "Dokument" erstellen, sollten Sie auch eine neue Entität "DocumentData" erstellen, auch wenn Sie noch keine Daten platzieren möchten:

%Vor%     
Alexey Solonets 29.01.2011 12:45
quelle
1

Eine Möglichkeit wäre, Ihre Ergebnismenge in einen anonymen Typ zu projizieren, wenn Sie das Blob nicht benötigen:

%Vor%

In diesem Beispiel werden nur Field1 und Field2 geladen.

Diese Methode hat den Nachteil, dass Sie die zurückgegebene Instanz nicht aktualisieren und context.SaveChanges ausführen können. Obwohl ich argumentieren würde, dass das Speichern einer Instanz ohne vollständige Kenntnis der Instanz grenzwertig unsicher ist. Diese Methode ist gut, wenn Sie eine lange Liste der Instanzen zurückgeben möchten, aber vor einer tatsächlichen Aktualisierung nach einer einzelnen Instanz, dem varbinary-Feld und allen, suchen.

    
Craig Stuntz 19.03.2009 17:23
quelle
1

Sie sollten Ihr varbinary-Feld aus der Tabelle entfernen und es in eine andere Tabelle einfügen, um eine Eins-zu-Eins-Beziehung zwischen diesen zu erstellen. Dies ist eine gute Übung, da Sie einfach Lazy Loading und andere Dinge implementieren können.

    
MegaMilivoje 18.09.2012 19:03
quelle
0

Tabellenaufteilung. Das Tool Entity Developer ermöglicht dies visuell durchzuführen. Sie können Ihre Entität verschiedenen Tabellen zuordnen.

    
JackD 09.02.2011 16:57
quelle