2010-12-13 60 views
1

J'ai créé une procédure stockée que je l'ai traîné sur mon dossier DBML attendant à créer une méthode qui renvoie une collection d'objets. Cependant, il me donne seulement une méthode retournant un ISingleResult.dbml génère ISingleResult <object> de ma procédure stockée quand je veux une collection

Ma procédure stockée crée une variable de table, la remplit avec des données, puis sélectionne tout de cette table.

Une idée de ce que je fais mal? Je peux poster un code si cela peut être utile.

Modifier. Voici le code généré à partir du dbml

[Function(Name="dbo.gr_RecentActions")] 
public ISingleResult<Action> gr_RecentActions([Parameter(Name="UserID", DbType="UniqueIdentifier")] System.Nullable<System.Guid> userID) 
{ 
    IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), userID); 
    return ((ISingleResult<Action>)(result.ReturnValue)); 
} 

Voici une section de la procédure stockée. C'est à peu près aussi simple.

ALTER PROCEDURE [dbo].[gr_RecentActions] 
@UserID UNIQUEIDENTIFIER 
AS 
BEGIN 

DECLARE @RecentActions AS TABLE (UserId UNIQUEIDENTIFIER, UserID1 UNIQUEIDENTIFIER, Name VARCHAR(500), GiftID UNIQUEIDENTIFIER, ActionType VARCHAR(20), ActionDate DATETIME) 

DECLARE @Friends AS Table (Userid UNIQUEIDENTIFIER) 

INSERT INTO @Friends (Userid) 
    (SUBQUERY...) 



INSERT INTO @RecentActions (UserId, UserId1, Name, GiftID, ActionType, ActionDate) 
    SELECT userid, NULL, Name, g.GiftId, 'GiftAdded', DateCreated FROM Gift g 
    WHERE UserId IN 
     (select UserId from @Friends) 

/* SNIP.... SIMILAR CODE TO ABOVE */ 


SELECT * FROM @RecentActions ORDER BY ActionDate DESC 
+4

Le code est toujours utile. –

+0

@Randy: D'accord. Il y a beaucoup de choses qui pourraient se passer ici. – poindexter12

Répondre

5

ISingleResult<T> hérite IEnumerable<T>. Il est une collection.

Il est un seul résultat, par opposition à un multiple résultat, comme dans plusieurs jeux de résultats:

SELECT * 
FROM Table1 

SELECT * 
FROM Table2 

Une procédure stockée comme ça ne reviendraient pas ISingleResult<T>.