Службы данных WCF (OData), запрос с ограничением наследования?

Проект: Служба данных WCF, использующая внутренний подход EF4 CTP5 Code-First.

Я настроил сущности с наследованием (TPH). См. Предыдущий вопрос по этой теме:

Предыдущий вопрос о нескольких объектах - одна и та же таблица

Сопоставление работает хорошо, и модульный тест EF4 подтверждает, что запросы выполняются плавно.

Мои объекты выглядят так:

  • ContactBase (аннотация)
  • Клиент (наследуется от ContactBase), этот объект также имеет несколько свойств навигации по отношению к другим объектам.
  • Ресурс (наследуется от ContactBase)

Я настроил дискриминатор, поэтому и Клиент, и Ресурс отображаются одинаково. Таблица. Опять же, все работает нормально с точки зрения Ef4 (юнит-тесты - вся зелень!)

Однако, раскрывая этот DBContext через службы данных WCF, я получаю: - Открыты наборы клиентских баз (наборы клиентов и ресурсов кажутся скрытыми, это задумано?) - Когда я запрашиваю Odata о клиентах, я получаю эту ошибку:

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.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)

Похоже на ограничение служб данных WCF ... не так ли? В Интернете не так много документации по службам данных WCF (OData) и спецификациям наследования.

Как я могу обойти это исключение? Мне нужны эти свойства навигации на производных объектах, и наследование кажется единственным способом обеспечить отображение 2 объектов в одной таблице с Ef4 CTP5 ...

Есть мысли?

6
задан Community 23 May 2017 в 10:30
поделиться