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?
OData sin duda es una mierda. Pero podría mejorar en el futuro. Mala experiencia trabajando con él año 2013. –