2012-11-16 2 views
3

J'ai un service WCF avec une méthode select nécessitant uniquement un identifiant. J'ai besoin d'utiliser plusieurs (20+) options de chargement pour obtenir tout ce dont j'ai besoin pour revenir, donc je pense que cela rendrait une requête assez compliquée et la compiler serait une bonne idée. Le seul moyen que j'ai trouvé jusqu'ici est de créer un contexte de données statiques et de charger les options à utiliser avec la requête compilée. Si je ne le fais pas, il se plaint d'utiliser un contexte différent de celui avec lequel il a été compilé. Donc, cela fait ma question devrais-je faire cela? Le fait d'avoir un contexte de données statiques sur un service Web peut-il causer des problèmes? Il ne serait utilisé que pour cette méthode. Toutes les autres méthodes créent les leurs. J'ai juste peur que je finisse par payer pour cette décision sur la route, donc tous les conseils seraient super! Merci!Puis-je utiliser une requête compilée dans un service Web?

private static DataLoadOptions loadOptions = GetDataLoadOpt(); 

    private static readonly Func<ItemsDataContext, int, Data.Item> SelectItem = 
     CompiledQuery.Compile((ItemsDataContext DataContext, int ItemId) => 
      DataContext.Items.Where(r => r.ItemID == ItemId).FirstOrDefault()); 

    private static DataLoadOptions GetDataLoadOpt() 
    { 
     var loadOpts = new System.Data.Linq.DataLoadOptions(); 
     loadOpts.LoadWith<Data.Item>(d => d.ItemProp); 
     . 
     . 
     . 
     return loadOpts; 
    } 
+0

Pouvez-vous poster votre code? Je ne peux pas imaginer pourquoi il faudrait un contexte de données pour compiler. J'ai plus de 30 requêtes compilées dans un de mes projets, sans contexte. – Dai

+0

Espérons que cela suffise pour avoir une idée de ce que je travaille avec – Mike

+0

pouvez-vous également publier l'exception et la trace de la pile? – Dai

Répondre

0

Les appels de service Web sont distincts. Je n'ai pas trouvé que le fait d'avoir un contexte statique partagé permettait d'économiser du temps car l'appel finissait par tourner une nouvelle instance. Et j'ai aussi plusieurs objets qui ont des stackoptions très volumineuses et compliquées dans certains de mes projets. Dans certains cas, j'ai un peu de perte de performance parce que je ramène beaucoup de tables, mais si les jointures sont fortes (DB bien conçue), alors ce n'est pas trop mal.

Questions connexes