LINQ to SQL unterstützt lazy loading einzelne Eigenschaften. Im DBML-Designer können Sie in den Eigenschaften einer Spalte Delay Loaded
auf true
setzen. Spalten, die verzögert geladen werden, sind nicht in der ursprünglichen SELECT
enthalten. Wenn Sie versuchen, auf die Eigenschaft des Objekts zuzugreifen, und es wurde noch nicht geladen, wird eine weitere SELECT
-Anweisung ausgeführt, um diesen Wert aus dem DB zu holen. Wenn Sie die DBML-Datei von Hand bearbeiten, legen Sie <Column IsDelayLoaded="true">
fest. Wenn Sie Ihre LINQ to SQL-Klassen von Hand schreiben, ist es einfach, das Hintergrundfeld der Eigenschaft als Link<T>
anstelle von T
zu deklarieren. Zum Beispiel:
[Table]
public class Person
{
private Link<string> _name;
[Column(Storage = "_name")]
public string Name
{
get { return _name.Value; }
set { _name.Value = value; }
}
}
Siehe auch "Delay/Lazy Loading-" in this post by Scott Guthrie.
Update: Die obige Antwort gilt, wenn die Spalte weiterhin verfügbar sein soll, wenn Sie sie benötigen. Es wird nicht in SELECT
s enthalten sein, es sei denn, Sie fragen ausdrücklich danach (siehe LoadOptions
) oder versuchen Sie, darauf zuzugreifen.
Wenn Sie die Spalte überhaupt nicht verwenden oder darauf zugreifen möchten und sie nicht als Klasseneigenschaft verfügbar sein soll, dann gehen Sie mit Serapth's answer zum Entfernen der Spalte aus der DBML-Datei. Stellen Sie sicher, dass Sie die Auswirkungen verstehen, z. B. den Verlust der Gleichzeitigkeitsprüfung für diese Spalte.
Sie zu konvertieren richtig sind, können Sie einen „Namen“ Klasse verwenden, statt ein anonyme Klasse, aber Sie geben immer noch "jedes zurückgegebene Feld einzeln an", das Sie in Ihrer Frage angegeben haben, was Sie nicht tun wollten: P – Lucas