6

Projet: Service de données WCF utilisant l'approche codée par le code EF4 CTP5 en interne.Services de données WCF (OData), requête avec limitation d'héritage?

J'ai configuré des entités avec l'héritage (TPH). Voir la question précédente sur ce sujet:

Previous question about multiple entities- same table

La cartographie fonctionne bien et test unitaire sur EF4 confirme que les requêtes fonctionne bien.

Mes entités ressemble à ceci:

  • ContactBase (résumé)
  • Client (hérite de ContactBase), cette entité a également plusieurs propriétés de navigation vers d'autres entités
  • ressources (hérite de ContactBase)

J'ai configuré un discriminateur, de sorte que client et ressource correspondent à la même table. Encore une fois, everythings fonctionne très bien sur le point de vue EF4 (unité teste tous les verts!)

Cependant, lors de l'exposition de cette DBContext sur WCF Data Services, je reçois: - ensembles de CustomerBases exposés (ensembles de clients et des ressources semble caché, ? est par la conception) - Lorsque je fais une recherche sur OData sur les clients, je reçois cette erreur:

Navigation Properties are not supported on derived entity types. Entity Set 'ContactBases' has a instance of type 'CodeFirstNamespace.Customer', which is an derived entity type and has navigation properties. Please remove all the navigation properties from type 'CodeFirstNamespace.Customer'. 

Stacktrace:

at System.Data.Services.Serializers.SyndicationSerializer.WriteObjectProperties(IExpandedResult expanded, Object customObject, ResourceType resourceType, Uri absoluteUri, String relativeUri, SyndicationItem item, DictionaryContent content, EpmSourcePathSegment currentSourceRoot) 
at System.Data.Services.Serializers.SyndicationSerializer.WriteEntryElement(IExpandedResult expanded, Object element, ResourceType expectedType, Uri absoluteUri, String relativeUri, SyndicationItem target) 
at System.Data.Services.Serializers.SyndicationSerializer.<DeferredFeedItems>d__b.MoveNext() 
at System.ServiceModel.Syndication.Atom10FeedFormatter.WriteItems(XmlWriter writer, IEnumerable`1 items, Uri feedBaseUri) 
at System.ServiceModel.Syndication.Atom10FeedFormatter.WriteFeedTo(XmlWriter writer, SyndicationFeed feed, Boolean isSourceFeed) 
at System.ServiceModel.Syndication.Atom10FeedFormatter.WriteFeed(XmlWriter writer) 
at System.ServiceModel.Syndication.Atom10FeedFormatter.WriteTo(XmlWriter writer) 
at System.Data.Services.Serializers.SyndicationSerializer.WriteTopLevelElements(IExpandedResult expanded, IEnumerator elements, Boolean hasMoved) 
at System.Data.Services.Serializers.Serializer.WriteRequest(IEnumerator queryResults, Boolean hasMoved) 
at System.Data.Services.ResponseBodyWriter.Write(Stream stream) 

on dirait une limitation de données WCF servi ces ... est-ce? On ne trouve pas beaucoup de documentation sur le Web à propos des services de données WCF (OData) et des spécifications d'héritage.

Comment puis-je dépasser cette exception? J'ai besoin de ces propriétés de navigation sur les entités dérivées, et l'héritage semble le seul moyen de fournir un mappage de 2 entités sur la même table avec Ef4 CTP5 ...

Des pensées?

+0

OData craint certainement. Mais cela pourrait devenir meilleur à l'avenir. Mauvaise expérience de travail avec l'année 2013. –

Répondre

2

Actuellement, les services de données WCF ne prennent pas en charge les propriétés de navigation sur les types dérivés. C'est une limitation connue et nous travaillons actuellement à l'activer pour notre prochaine version.

Actuellement, le travail consiste à mettre toutes les propriétés de navigation au type référencé par l'ensemble. Dans votre exemple, pouvez-vous faire en sorte que le type d'ensemble d'entités soit client, au lieu de ContactBase?

Espérons que cela aide. Merci Pratik

+1

Cela aide certainement et certainement nul. Pas d'OData pour moi. – CodeMonkeyKing

+0

Une mise à jour sur les types dérivés a été ajoutée aux services de données WCF. http://blogs.msdn.com/b/astoriateam/archive/2012/04/09/wcf-data-services-5-0-rtm-release.aspx – Quickhorn

+0

Je veux aussi renvoyer un type dérivé où nous déclarez dans la navigation le type parent. Cela semble être un problème depuis 2010 ... Maintenant, est l'année 2017 ... ce problème a été résolu? –

Questions connexes