Как обойти "тип 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, HashSet1 visitedComplexTypeObjects, ODataValue& odataValue) at System.Data.Services.Client.ODataPropertyConverter.PopulateProperties(Object resource, String serverTypeName, IEnumerable1 свойства) в 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()

0 ответов

Другие вопросы по тегам