6

Proyecto: Servicio de datos WCF utilizando internamente el enfoque EF4 CTP5 Código-Primero.Servicios de datos WCF (OData), consulta con limitación de herencia?

He configurado entidades con herencia (TPH). Véase la pregunta anterior sobre este tema:

Previous question about multiple entities- same table

El mapeo funciona bien, y prueba unitaria sobre EF4 confirma que las consultas se ejecuta sin problemas.

Mis entidades se ve así:

  • ContactBase (resumen)
  • Cliente (hereda de ContactBase), esta entidad tiene también varias propiedades de navegación hacia otras entidades
  • de recursos (hereda de ContactBase)

He configurado un discriminador, por lo que tanto el cliente como el mapa de recursos están en la misma tabla. Una vez más, todo esta funciona bien en el punto de vista EF4 (unidad de prueba todos los verdes!)

Sin embargo, al exponer esta DBContext sobre los servicios de datos de WCF, me sale: - CustomerBases conjuntos expuestos (clientes y Recursos conjuntos parece ocultos, ? ¿es por diseño) - Cuando consulto sobre Odata en los clientes, me sale este error:

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) 

parece como una limitación de servi datos de WCF Ces ... ¿verdad? No se puede encontrar mucha documentación en la web sobre los servicios de datos de WCF (OData) y las especificaciones de herencia.

¿Cómo puedo sobrepasar esta excepción? Necesito estas propiedades de navegación en entidades derivadas, y la herencia parece ser la única forma de proporcionar un mapeo de 2 entidades en la misma tabla con Ef4 CTP5 ...

¿Alguna idea?

+0

OData sin duda es una mierda. Pero podría mejorar en el futuro. Mala experiencia trabajando con él año 2013. –

Respuesta

2

Actualmente, los servicios de datos WCF no son compatibles con las propiedades de navegación en los tipos derivados. Esta es una limitación conocida y actualmente estamos trabajando en habilitar esto para nuestra próxima versión.

Actualmente, la solución alternativa es que ponga todas las propiedades de navegación al tipo al que se refiere el conjunto. En su ejemplo, ¿puede hacer que el tipo de conjunto de entidades sea cliente, en lugar de ContactBase?

Espero que esto ayude. Gracias Pratik

+1

Esto ciertamente ayuda y ciertamente apesta. No OData para mí. – CodeMonkeyKing

+0

Se ha agregado una actualización de tipos derivados a WCF Data Services. http://blogs.msdn.com/b/astoriateam/archive/2012/04/09/wcf-data-services-5-0-rtm-release.aspx – Quickhorn

+0

Yo también quiero devolver un tipo derivado donde declarar en la navegación el tipo padre. Esto parece ser un problema desde 2010 ... Ahora es el año 2017 ... ¿se ha solucionado este problema? –

Cuestiones relacionadas