2010-03-01 3 views
3

Dans une classe linq2sql, j'appelle une procédure stockée qui renvoie plusieurs ensembles de résultats et cela fonctionne.Linq2Sql Designer retourne la procédure de stockage Résultat multiple défini sur Single

Chaque fois que j'ajoute une nouvelle procédure dans le concepteur linq2sql et qu'il stealth convertit la procédure stockée susmentionnée de IMultipleResults à ISingleResult dans designer.cs.

J'ai remplacé le code par une version précédente et cela fonctionne, mais pourquoi cela se produit-il? Comment puis-je empêcher le concepteur de changer le code qui fonctionne?

Chaque fois que j'ajoute un nouveau sp, je dois annuler ce que fait le concepteur.

Ce

[Function(Name="dbo.GetCustomerOrderDetails")] 
[ResultType(typeof(GetCustomerOrderSummaryResult))] 
[ResultType(typeof(GetOrderLineDetailsResult))] 

public IMultipleResults GetCustomerOrderDetails([Parameter(DbType="UniqueIdentifier")] System.Nullable<System.Guid> custGuid, [Parameter(DbType="VarChar(75)")] string email, [Parameter(DbType="Int")] System.Nullable<int> orderId) 
{ 
    IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), custGuid, email, orderId); 
     return (IMultipleResults)result.ReturnValue; 
} 

se change à ce par le designer linq2sql

[Function(Name="dbo.GetOrderLineDetails")] 
public ISingleResult<GetOrderLineDetailsResult> GetOrderLineDetails([Parameter(DbType="Int")] System.Nullable<int> orderId) 
{ 
    IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), orderId); 
    return ((ISingleResult<GetOrderLineDetailsResult>)(result.ReturnValue)); 
} 

que j'ai finalement Annulez manuellement.

Répondre

4

La classe DataContext dérivée que crée le concepteur OR est déclarée en tant que classe partielle. Créez un autre fichier qui étend cette classe partielle, déplacez votre code spécifique que le concepteur OR continue de modifier, plus la classe GetOrderLineDetailsResult, dans ce fichier. Ensuite, retirez le sp de OU concepteur. OU concepteur devrait maintenant laisser votre code intact.

+0

Je pensais dans ce sens, mais j'espérais qu'il y aurait un moyen plus facile. Merci. – Steve

1

Au lieu d'utiliser des procédures stockées, utilisez les fonctions définies par l'utilisateur. Ils vous permettront de définir un type de retour. LinqToSql peut alors lire ce type de retour et créer des classes en conséquence. Sinon, votre type est bloqué avec ce qu'il génère (pour autant que je sache)