Проект: Служба данных WCF, использующая внутренний подход EF4 CTP5 Code-First.
Я настроил сущности с наследованием (TPH).
Смотрите предыдущий вопрос по этой теме:
Предыдущий вопрос о нескольких объектах - одна и та же таблица
Сопоставление работает хорошо, а модульное тестирование по EF4 подтверждает, что запросы выполняются гладко.
Мои сущности выглядят так:
- ContactBase (аннотация)
- Клиент (наследуется от ContactBase), эта сущность также имеет несколько свойств навигации по отношению к другим сущностям
- Ресурс (наследуется от ContactBase)
Я настроил дискриминатор, поэтому и клиент, и ресурс сопоставляются с одной и той же таблицей.
Опять же, все работает нормально с точки зрения Ef4 (юнит тестирует все зеленые!)
Тем не менее, при представлении этого DBContext через службы данных WCF, я получаю:
- Открыты наборы CustomerBases (наборы Customer и Resources кажутся скрытыми, это задумано?)
- Когда я запрашиваю 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.<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)
Похоже на ограничение услуг WCF Data ... не так ли?
В Интернете не так много документации о службах данных WCF (OData) и спецификациях наследования.
Как я могу преодолеть это исключение? Мне нужны эти свойства навигации для производных объектов, и наследование кажется единственным способом обеспечить сопоставление 2 объектов в одной таблице с Ef4 CTP5 ...
Есть мысли?