LINQ to SQL prend en charge lazy loading propriétés individuelles. Dans le concepteur DBML, vous pouvez définir Delay Loaded
à true
dans les propriétés d'une colonne. Les colonnes chargées en différé ne seront pas incluses dans le SELECT
initial. Si vous essayez d'accéder à la propriété de l'objet et qu'il n'a pas encore été chargé, une autre instruction SELECT
sera exécutée pour amener cette valeur à partir de la base de données.
Si vous modifiez le fichier DBML à la main, définissez <Column IsDelayLoaded="true">
. Si vous écrivez vos classes LINQ to SQL manuellement, il est aussi simple que de déclarer le champ de sauvegarde de la propriété comme Link<T>
au lieu de T
. Par exemple:
[Table]
public class Person
{
private Link<string> _name;
[Column(Storage = "_name")]
public string Name
{
get { return _name.Value; }
set { _name.Value = value; }
}
}
Voir aussi la section "Delay/Lazy Loading" dans this post by Scott Guthrie.
Mise à jour: La réponse ci-dessus s'applique si vous souhaitez que la colonne soit toujours disponible lorsque vous en avez besoin. Il ne sera pas intégré dans SELECT
si vous le demandez spécifiquement (consultez LoadOptions
) ou d'essayer d'y accéder.
Si vous ne voulez tout simplement pas utiliser ou accéder à la colonne et que vous ne souhaitez pas la voir comme propriété de classe, passez à Serapth's answer pour supprimer la colonne du fichier DBML. Assurez-vous de bien comprendre les implications, telles que la perte de contrôle de concurrence sur cette colonne.
Vous avez raison, vous pouvez utiliser une classe « nommée » au lieu d'un classe anonyme, mais vous "spécifiez toujours chaque champ retourné individuellement", ce que vous avez dit dans votre question que vous ne vouliez pas faire: P – Lucas