2010-01-05 6 views
2

Pourquoi le concepteur Linq to SQL ne peut-il pas comprendre la procédure stockée suivante et l'importer correctement?Linq to SQL (concepteur) ne comprend pas la procédure stockée

CREATE PROCEDURE dbo.MartinTest 
    @parameter1 INTEGER 

AS 
    SET NOCOUNT ON 

    SELECT C1, C2, C3 
    INTO #myTempTable 
    FROM MyTable 

    SELECT C1, C2, C3 
    FROM MyOtherTable INNER JOIN #myTempTable ON .... 

    RETURN 

Lorsque j'utilise le concepteur d'importer cette procédure stockée, il définit le type de retour comme « aucun », même si le SP retourne clairement une ou plusieurs lignes de données.

considérant que, si je retire la première instruction select et au lieu simplement retourner le contenu de la table originale ...

CREATE PROCEDURE dbo.MartinTest 
    @parameter1 INTEGER 

AS 
    SET NOCOUNT ON 

    SELECT C1, C2, C3 
    FROM MyTable 

    RETURN 

... le concepteur fonctionne très bien et détermine le type de retour correct.

BTW: Je sais que je peux coder manuellement l'appel à la procédure stockée, donc je ne cherche pas de solution, je suis plus intéressé de savoir si c'est un bug dans le concepteur pour Linq to SQL ou si est autre chose. J'utilise VS2008 SP1.

Merci.

Répondre

3

Cela ne pose pas de problème technique avec le concepteur Linq to SQL, il s'agit d'un problème avec SQL Server. Le concepteur Linq to SQL utilise SET FMTONLY ON pour obtenir les informations sur le jeu de résultats d'une procédure stockée. Malheureusement, cette méthode ne fonctionne pas lorsque la procédure stockée a une table temporaire.

Il ya un petit va-et-vient à ce sujet dans les premiers commentaires de ScottGu's blog post.

+0

Non seulement LINQ, mais SSRS aussi et dieu sait quoi d'autre! – gbn

1

Vous pouvez manuellement SET FMTONLY OFF au début de la procédure stockée. Probablement le commenter pour une utilisation normale, et ne le décommentez que lors de la génération de vos classes LINQ.

Questions connexes