2009-03-19 3 views

Antwort

6

Die Lösung war eine separate Tabelle mit dem varbinary Feld zu erzeugen und 1-zu-1-Beziehung macht zwischen den Tischen

+0

Nicht immer möglich auf einem vorhandenen Schema, aber wahrscheinlich der einfachste Ansatz, wenn es möglich ist. Ich habe es getan, mit einem Fremdschlüssel zu "sekundären" Tabelle in meiner "Haupttabelle", prüfen, ob FK ist Null oder nicht erlaubt, schnell zu wissen, ob oder nicht, wenn ein "sekundärer" Datensatz existiert, ohne es tatsächlich laden zu müssen. – AFract

1

Eine Möglichkeit wäre Ihr Ergebnis in einen anonymen Typen auf Projekt, wenn Sie den Blob nicht brauchen:

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

In diesem Beispiel 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.

+0

Vielen Dank für Ihre Unterstützung. Ich war auf der Suche nach etwas, das dem Lazy Loading des varbinären Feldes ähnlich ist :) aber es scheint, dass dies nicht möglich ist. – Emil

4

Es ist nicht unbedingt separate Tabelle zu erstellen. Sie sollten mehrere Schritte ausführen. Nehmen wir an, wir haben die Tabelle 'Dokumente' (ID, Name, Daten (varbinary)).

  1. Öffnen Sie EF-Designer, kopieren Sie die Entität 'Dokument' und fügen Sie sie ein.
  2. Benennen Sie es in "DocumentData" um. Fügen Sie die Zuordnung zur Tabelle "Dokumente" hinzu.
  3. Löschen der 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 Verknüpfung aus, gehen Sie zu Eigenschaften, klicken Sie auf '...' im Feld 'Referentielle Abhängigkeit', wählen Sie 'Dokument' als Prinzipal, lassen Sie alle als Standard (Id -> Id) und klicken Sie auf OK.

Jetzt das Projekt erstellen.

HINWEIS. Nun, wenn neue ‚Dokument‘ Einheit zu schaffen, sollten Sie auch neue ‚Dokumentdaten‘ Entität erstellen, auch wenn Sie noch keine Daten platzieren wollen:

Document doc = new Document(); 

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

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

Tabelle Spaltung. Entity Developer Werkzeug ermöglicht dies visuell durchzuführen. Sie können Ihre Entität verschiedenen Tabellen zuordnen.

1

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

Verwandte Themen