2010-09-17 5 views
2

J'utilise LINQ to SQL pour accéder à ma base de données mais je ne fais que lire, je n'insère, ne mets à jour ou ne supprime jamais rien. Existe-t-il des moyens d'optimiser LINQ2SQL pour cela?Lecture seule LINQ to SQL

Répondre

5

Oui il y a. Linq 2 SQL met par défaut en cache toutes les données que vous avez lues dans la base de données. Il doit faire cela pour suivre toutes les modifications que vous appliquez à vos objets, afin qu'il puisse générer les instructions insert/update/delete nécessaires lorsque vous appelez SubmitChanges()

Si vous lisez uniquement des données, cela n'est pas cohérent. Vous pouvez désactiver le suivi des objets en définissant la propriété ObjectTrackingEnabled sur false sur votre DataContext.

0

Une chose m'a été dit, est d'éviter d'utiliser la classe d'enregistrement généré. En d'autres termes, si vous avez une table Users, L2S créera pour vous une classe User, qui est ce qu'elle renvoie de la base de données. Au lieu de l'utiliser directement, vous devez créer une classe "shadow" --- toutes les mêmes propriétés, mais rien d'autre, et copier immédiatement les données dans ces enregistrements pour votre usage. En fait, si elle va être en lecture seule uniquement, vous pouvez les assigner dans le cteur, et seulement getters publics:

class myUser 
{ 
    public string FName {get; private set} 
    public string LName {get; private set} 
    public myUser(User user) 
    { 
     this.FName = user.FName; 
     this.LName = user.LName; 
    } 
} 



var users = from u in db.Users 
      where ..... 
      select new myUsers(u); 

Cela évite beaucoup de frais généraux nécessaires pour faire face à la possibilité d'écrire l'objet encore dehors.