0 votes

solution sur SP et EF & Ria Service

Avec la sortie de EF 4.0, le support des procédures stockées du serveur SQL a été renforcé. Le type complexe peut être généré automatiquement pour le jeu de données de résultat de la procédure stockée. Mais le type complexe n'est pas pris en charge par le service Ria.

Lorsque j'essaie d'utiliser le service ria combiné avec EF 4.0, je veux obtenir le jeu de données par SP. Ce résultat n'est associé à aucune entité/table.

Voici quelques-unes des solutions proposées par la communauté : 1. Créer une vue pour cartographier le résultat des sp. (mais pour EF, s'il n'y a pas d'ID ou de primaire, il ne peut être associé à aucune entité). 2. Créer une entité pour mapper le résultat sp (pour cela, vous devez même mapper SP pour CRUD même si je n'ai pas besoin de CUD sur ce résultat sp).

La solution ci-dessus ne peut pas non plus être automatisée. Comme les objets de la base de données peuvent changer avec le temps, la mise à jour automatique de l'edm perdra la solution ci-dessus.

Quelle est donc la solution ? Je veux ramener les opérations de données à la base de données autant que possible, de sorte que de nombreuses modifications puissent être effectuées dans la base de données et qu'il ne soit pas nécessaire de reconstruire les assemblages .net (ce qui entraîne un redéploiement).

0voto

Jeremiah Points 2738

Le même problème se pose souvent dans le cadre de notre développement. La solution que nous avons choisi de mettre en œuvre est WCF RIA Services avec POCO (Plain Old CLR Object).

En utilisant les POCO, nous pouvons mettre en œuvre un service de domaine qui communique avec le client par l'intermédiaire d'un objet que nous créons à la main. Cela nous donne accès à la base de données par le biais de n'importe quelle technologie (EF, ou n'importe quoi d'autre en fait) sur le serveur, ce qui nous permet d'utiliser la procédure stockée et l'utilisation de la RIA sur le client.

Bien entendu, ce processus ajoute une étape amusante au système. Vous devrez maintenir votre POCO dans la procédure stockée de votre base de données.

Exemple simple :

[EnableClientAccess()]
public class FooBarService : LinqToEntitiesDomainService<MyDBEntities>
{
    public IQueryable<FooBar> GetFooBar()
    {
        var qry =   from FooBarSPs in this.ObjectContext.FooBarSPs
                orderby FooBarSPs.Name
                select new FooBar
                {
                    ID = FooBarSPs.ID,
                    Name = FooBarSPs.Name
                };
        return qry;
    }
}

Si vous devez utiliser les services WCF RIA et que vous souhaitez communiquer avec une procédure stockée, l'utilisation d'objets POCO comme messagers est la méthode la plus simple que j'ai vue.

Je vous recommande de regarder l'intervention de Brad Abram à Mix 09 l'année dernière : http://videos.visitmix.com/MIX09/T40F

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X