LINQ to SQL supporta lazy loading proprietà individuali. Nella finestra di progettazione DBML, è possibile impostare Delay Loaded
su true
nelle proprietà di una colonna. Le colonne caricate in ritardo non saranno incluse nell'iniziale SELECT
. Se si tenta di accedere alla proprietà dell'oggetto e non è ancora stato caricato, verrà eseguita un'altra istruzione SELECT
per portare questo valore dal DB.
Se si modifica manualmente il file DBML, impostare <Column IsDelayLoaded="true">
. Se stai scrivendo manualmente le tue classi LINQ su SQL, è semplice come dichiarare il campo di supporto della proprietà come Link<T>
anziché T
. Per esempio:
[Table]
public class Person
{
private Link<string> _name;
[Column(Storage = "_name")]
public string Name
{
get { return _name.Value; }
set { _name.Value = value; }
}
}
veda anche la sezione "Delay/caricamento pigro" in this post by Scott Guthrie.
Aggiornamento: la risposta sopra riportata si applica se si desidera che la colonna sia ancora disponibile quando è necessaria. Non sarà incluso in SELECT
s a meno che non lo richieda espressamente (vedere LoadOptions
) o provare ad accedervi.
Se non si desidera utilizzare o accedere alla colonna e non si desidera che sia disponibile come proprietà di classe, andare con Serapth's answer di rimuovere la colonna dal file DBML. Assicurati di comprendere le implicazioni, come la perdita del controllo della concorrenza su quella colonna.
Lei ha ragione, è possibile utilizzare una classe "nome" al posto di un classe anonima, ma ancora "specifichi ogni campo restituito individualmente", che hai detto nella tua domanda che non volevi fare: P – Lucas