J'ai créé une base de données (SQL Server 2008 Express) et créé des entités LINQ to SQL (appelées LinqEntitiesDataContext) en utilisant le concepteur OR dans Visual Studio 2010. J'ai ensuite créé un référentiel interface IRepository de classe et associée, contenant un tas de méthodes CRUD sympas et simples qui fournissent un accès significatif aux entités de données. Par exemple, il y a une méthode:Utilisation d'OData avec le modèle de référentiel
IQueryable<User> QueryUsersByType(UserTypeEnum userType)
et un autre:
void CreateUserWithDefaultType(User user)
Maintenant, je veux faire de ce référentiel disponible « à travers le fil » et que vous souhaitez utiliser WCF Data Services (OData) pour fournir un accès . Mais chaque exemple d'OData que j'ai vu finit par fournir un accès direct aux entités elles-mêmes (par exemple l'entité Utilisateurs). Pour ce faire, implémentez IUpdatable, puis créez un service de données WCF qui fait référence à cette classe de contexte de données. Dans mon cas, cela voudrait dire rendre LinqEntitiesDataContext IUpdatable et l'utiliser comme type de service - ce qui évite complètement d'utiliser ma classe Repository.
Je sens que je dois faire le service de données exposer mon dépôt:
DataService<Repository> // *Not* DataService<LinqEntitiesDataContext>
mais je dois faire mon dépôt mettre en œuvre IUpdatable, en évitant les appels à mes méthodes de mise à jour existantes (par exemple CreateUserWithDefaultType)
Qu'est-ce qui me manque ici? Existe-t-il un bon exemple de comment faire cela correctement, exposant la couche Repository plutôt que la couche d'entité?
Hmmm, cela signifie que je ne peux pas implémenter une bonne interface propre à mon modèle de données une seule fois et que les consommateurs de services en bénéficieront. Au lieu de cela, chaque composant de ma couche logique métier devra travailler au niveau de l'entité, appliquer des filtres, développer des clés étrangères, implémenter la pagination, etc. Puis-je utiliser Service Operations pour faire ce que je veux? un gâchis?! – MarkH
Certaines des choses que vous voulez faire peuvent certainement être faites du côté serveur. La pagination est triviale du côté serveur si vous travaillez avec le fournisseur EF, et ce n'est pas trop difficile dans le cas contraire. Pré-appliquer des filtres et étendre les clés étrangères est possible, vous devrez peut-être travailler plus dur pour y arriver. Les Opérations de service seront probablement capables de faire tout ce que vous voulez, mais cela risque d'entraîner des dégâts. Morale de l'histoire: nous devons donner la priorité à ces fournisseurs publics. –
Ok, pas ce que je voulais entendre, mais merci pour vos commentaires Mark. Je vais continuer avec OData en tant qu'interface entre nos couches d'architecture car cela correspond à d'autres façons. – MarkH