2009-09-21 2 views
1

été en utilisant ExecuteQuery avec un certain succès, à savoir où AccessRights est mon DTO et queryString contient « Exec sp_name param1, param2 etc »linq2sql: utiliser ExceuteQuery <dto> lorsque les lignes renvoyées ne se trouvent pas dans mon dto? Puis-je utiliser un type de données générique?

var accessRights = 
    this.db.ExecuteQuery<AccessRights>(queryString, sqlParams.Values.ToArray()).AsQueryable(); 

Tout fonctionne parfaitement si ce qui revient de la procédure stockée peut être mis en correspondance parfaitement au type (dto) que je passe dans le générique ExecuteQuery

Le problème est maintenant que j'ai une procédure stockée qui renvoie un nom de colonne non standard.

Fondamentalement, mon i VHA ma AccessRights classe (DTO) qui contient, "userId", "accessRightId", "Description"

mais la nouvelle procédure stockée retourne UserId, AccessRightId, "TemporaryDescription".

je ne peux plus changer que d'autres choses en dépendent ... si je

var accessRights = 
    this.db.ExecuteQuery<AccessRights>(queryString, sqlParams.Values.ToArray()).AsQueryable(); 

alors je ne vois pas « TemporaryDescription », qui je suppose est logique car il ne existe

Ce que je dois faire est de mapper la description temporaire à la description.

Tout le monde a une idée de comment faire cela?

Répondre

0

Vous pouvez essayer d'ajouter l'attribut [Column(...)]; pas d'idée si ça va marcher.

Quelques options qui sautent à l'esprit:

  • construire une classe qui -t carte 1: 1 (par nom), puis de traduire ces données (via Select, ou une requête LINQ) dans votre réelle classe destinée
  • écrire un wrapper SP qui renomme la colonne (pas gentil, vous auriez besoin d'une table temporaire, forçant probablement recompilation en raison de DDL/DML entrelacer)
  • glisser la SP sur le concepteur contexte de données et renommer les colonnes manuellement dans le types générés (consdier ceci comme une implémentation automatisée de la première puce)
  • déplacer (refactoriser) la partie intéressante du SP dans un UDF que vous pouvez appeler depuis votre sp existant, et utiliser le UDF directement à partir du contexte de données (faites glisser l'UDF sur le concepteur)
+0

Salut marc, non cela ne résout pas le problème –

Questions connexes