2010-11-03 7 views
1

Après une journée de recherche et de test, j'ai l'impression que vous ne pouvez pas appeler les procédures stockées de Silverlight 4 à l'aide des services WIA RIA.Silverlight 4 et les procédures stockées

Cela ne peut tout simplement pas être vrai. Silverlight étant très axé sur le rapport, je ne crois pas qu'il soit impossible d'appeler des procédures stockées. Pouvez-vous utiliser les procédures stockées avec les services Silverlight et RIA?

Si ce n'est pas le cas, existe-t-il une solution de contournement pour les ensembles de données agrégés>?

Répondre

2

J'ai trouvé ce qui suit excellent guide étape par étape sur ce site -

http://betaforums.silverlight.net/forums/p/218383/521023.aspx

1) Ajouter un ADO Entity Data Model à votre projet Web; Sélectionnez générer à partir de l'option de base de données; Sélectionnez votre instance de base de données à laquelle vous connecter.

2) Choisissez votre objet DB à importer dans le modèle. Vous pouvez développer le noeud Table pour sélectionner toute table que vous souhaitez importer dans le modèle. Développez le nœud Procédure stockée pour sélectionner également votre précedire stockée. Cliquez sur Terminer pour terminer l'importation.

3) Cliquez avec le bouton droit de la souris sur le concepteur de modèle de base de données pour sélectionner Ajouter/Importer une fonction. Attribuez un nom à la fonction (le même nom que votre SP vous convient) et sélectionnez la procédure stockée que vous souhaitez mapper. Si votre SP renvoie un seul champ, vous pouvez mapper le résultat de retour à une collection de scalaires. Si votre SP renvoie plus d'un champ, vous pouvez mapper le résultat de retour à une collection ou Entité (si tous les champs proviennent d'une seule table) ou une collection de types complexes.

Si vous souhaitez utiliser le type complexe, vous pouvez cliquer sur le bouton Obtenir la colonne pour obtenir toutes les colonnes de votre SP. Cliquez ensuite sur Créer un nouveau type de bouton pour créer ce type de complexe.

4) Ajouter une classe de service de domaine au projet Web. Sélectionnez le DataModel que vous venez de créer en tant que DataContext de ce service. Sélectionnez tous les droits que vous souhaitez exposer au client. Les fonctions de service doivent être générées pour ces entités.

5) Vous ne pouvez pas voir le type Complexe dans la liste Entité. Vous devez ajouter manuellement une fonction de requête pour votre SP dans votre service: Dites que votre SP est appelé SP1, le type de complexe que vous avez généré s'appelle SP1_Result.

Ajoutez le code suivant dans votre classe de service de domaine:

public IQueryable<SP1_Result> SP1() 
    { 
     return this.ObjectContext.SP1().AsQueryable();    
    } 

Maintenant, vous pouvez compiler votre projet. Vous pourriez obtenir une erreur comme celle-ci: "SP1_Result n'a pas de clé" (si vous n'êtes pas sur le service RIA SP1 beta).Si vous le faites, vous devez faire ce qui suit dans le fichier de métadonnées de service:

Ajout d'une classe de métadonnées SP1_Result et marqué le champ Clé:

[MetadataTypeAttribute(typeof(SP1_Result.SP1_ResultMetadata))] 
public partial class SP1_Result 
{ 
    internal sealed class SP1_ResultMetadata 
    { 
     [Key] 
     public int MyId; // Change MyId to the ID field of your SP_Result 
    } 
} 

6) Compile votre solution. Vous avez maintenant SP1_Result exposé au client. Vérifiez le fichier généré, vous devriez voir SP1_Result est généré en tant que classe Entity. Vous pouvez maintenant accéder à DomainContext.SP1Query et DomainContext.SP1_Results dans votre code Silverlight. Vous pouvez le traiter comme vous le faites avec n'importe quelle autre classe Entity (l'entité mappée à une table).

5

Vous devez l'ajouter à votre modèle en tant que fonction, puis l'appeler en tant que membre du DomainService. Le pointeur est que le résultat de la procédure stockée doit correspondre exactement à une entité car les services RIA ne vous permettent pas d'utiliser un résultat de type complexe.

Il est également possible de ne pas utiliser RIA et d'utiliser un service WCF activé pour Silverlight. Cependant, vous perdrez toutes les fonctionnalités de DomainService comme LINQ, mais vous aurez plus de contrôle sur ce qui est retourné et comment.

+2

RIA Services SP1 (version bêta lancée il y a quelques jours), prend en charge des types complexes (entre autres). –