Как обойти "тип full.name" не имеет настраиваемых свойств "в клиенте служб данных WCF?
Я использую WCF Data Services 5.6 с пользовательскими классами сущностей и успешно считываю данные в сущности, которые наследуются от ModelBase Catel. Тем не менее, когда я пытаюсь выполнить вставку или обновление обратно, отражение, используемое службой данных, не выполняется в одном из доступных только для чтения свойств ModelBase "ValidationContext", который реализует интерфейс без установщиков. ValidationContext имеет атрибуты [XmlIgnore] и [Browsable(false)], определенные в Catel.
Я попытался удалить это свойство как в хуках Configurations.RequestPipeline.OnEntryStarting, так и в OnEntryEnding, а также с помощью (старой школы) метода редактирования xml в событии WritingEntry. Но приведенное ниже исключение возникает до того, как произойдет любое из этих событий.
Таким образом, похоже, что клиент Data Services размышляет о типе перед попыткой сериализации и выкладывает ошибку там, потому что он не может интерпретировать IValidationContext как допустимый тип сущности в модели.
Один из обходных путей, который я успешно протестировал, заключается в эффективной замене открытого свойства ModelBase закрытой версией:
internal new IValidationContext ValidationContext
{
get { return base.ValidationContext; }
}
но это, очевидно, неприемлемо, потому что тогда я не могу использовать ValidationContext в другом месте.
Я полагаю, что это также будет проблемой с прокси-серверами, сгенерированными с помощью "Добавить ссылку на службу", если вы добавите какие-либо свойства, подобные этому, в частичный код класса для любых объектов.
Любой совет? Можем ли мы заменить / переопределить любой из соответствующих методов сериализатора?
Тип "Catel.Data.IValidationContext" не имеет настраиваемых свойств. Источник: Microsoft.Data.Services.Client в System.Data.Services.Client.ClientEdmModel.GetOrCreateEdmType(Тип тип) в System.Data.Services.Client.Metadata.ClientTypeUtil.TypeIsEntity(тип t, модель типа DataEdl)..Services.Client.ODataPropertyConverter.TryConvertPropertyValue(свойство ClientPropertyAnnotation, свойство объекта Value, HashSet
1 visitedComplexTypeObjects, ODataValue& odataValue) at System.Data.Services.Client.ODataPropertyConverter.PopulateProperties(Object resource, String serverTypeName, IEnumerable
1 свойства) в System.Data.Services.Client.Serializer.WriteEntry(EntityDescriptor entityDescriptor, IEnumerable`1 relatedLinks, ODataRequestMessageWrapper requestMessage) в System.Data.Services.Client.BaseSaveResult.CreateRequestDesscriptDataDataDataDataDataDerverDataDataDataDataDataDataDerverDataDataDataDataDataDataDataDataDataDataDataDataDataDataDataDataDataDataDataDataDataDataDataDataDataDataDataDataDataDataDataDataDataDataDataDerverDataDirectoryData(EntityData), EntityDataData.Services.Client.BaseSaveResult.CreateChangeData(индекс Int32, ODataRequestMessageWrapper requestMessage) в System.Data.Services.Client.BatchSaveResult.GenerateBatchRequest()
в System.Data.Services.Client.BatchSaveResult.BatchRequest() в System.Data.Services.Client.DataServiceContext.SaveChanges(параметры SaveChangesOptions) в System.Data.Services.Client.DataServiceContext.SaveChanges()