2010-04-15 6 views
0

A mesure qu'EF 4.0 est disponible, plus de support pour la procédure stockée du serveur SQL. Le type complexe peut être généré automatiquement pour l'ensemble de données de résultat de SP. Mais le type complexe n'est pas supporté par Ria Service.solution sur Service SP et EF & Ria

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

Certains sulutions proposés par la communauté sont: 1. Créer une vue à la carte résultat sp. (mais pour EF, s'il n'y a pas d'ID ou de primaire, il ne peut être mappé à aucune entité) 2. Créez une entité pour mapper le résultat sp (pour cela, vous devez même mapper le SP pour CRUD même si je ne le fais pas besoin CUD sur ce résultat sp)

également ci-dessus solution ne peut être automatisée. Comme les objets de base de données peuvent être modifiés avec le temps, la mise à jour automatique edm sera perdue au-dessus de la solution.

Alors, quelle est la solution? Je veux remettre l'opération de données à DB autant que possible, de sorte que beaucoup de changements puissent être faits dans la DB et pas besoin de reconstruire des assemblys de .NET (ceci cause le redéploiement).

Répondre

0

Nous avons le même problème venir plusieurs fois dans notre développement. Le travail que nous avons choisi de mettre en œuvre est WCF RIA Services avec POCO (Plain Old CLR Object).

L'utilisation de POCO nous pouvons mettre en œuvre un service de domaine qui communique au client par un objet que nous créons à la main. Cela nous donne accès à la base de données grâce à toute technologie (EF, ou quelque chose de vraiment) sur le serveur, ce qui nous permet d'utiliser la procédure stockée et l'utilisation de RIA sur le client.

Bien sûr, ce processus ajoute une étape funky du système. Vous devrez maintenir votre POCO à 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 WCF RIA Services et vous voulez parler à une procédure stockée, en utilisant des objets POCO comme les messagers sont la meilleure façon que je l'ai vu, de le faire.

Je recommande de regarder le discours de Brad Abram au Mix 09 années dernière: http://videos.visitmix.com/MIX09/T40F