我正在尝试为Oracle数据库创建WCF数据服务。我正在使用Oracle实体框架适配器并为所有视图创建实体(它是一个只读服务)。我遇到的问题是DateTimeOffset不是受支持的基本类型。
好的,我已经搜索了一下,这不是一个未知的问题,但我找不到答案!我无法编辑视图以更改作为其专有数据库返回的类型。有人提到使用RegisterKnownType(typeof(DateTimeOffset)),但这不起作用。其他人说我需要序列化数据,但不解释如何。
有没有人有关于如何获取WCF数据服务返回的不受支持的基元类型的分步解决方案?
答案 0 :(得分:0)
Fom Data Contract Known Types:
与其他基本类型不同,DateTimeOffset结构不是 默认情况下已知类型,因此必须手动将其添加到列表中 已知类型。
本文档以及KnownTypeAttribute Class描述了如何添加到已知类型列表中。
Open Data Protocol by Example还提到了DateTimeOffset类型。
答案 1 :(得分:0)
与Best work around to fix DateTimeOffset over WCF Data Service issue类似
这是一个使用反射的黑客攻击,但是在应用程序启动时使用以下内容(我使用WebActivator)到目前为止使用的是2011年10月的CTP。
var primitiveResourceTypeMapType = typeof(ResourceType).Assembly.GetType("System.Data.Services.Providers.PrimitiveResourceTypeMap");
Debug.Assert(primitiveResourceTypeMapType != null);
var builtInTypesMappingField = primitiveResourceTypeMapType.GetField("builtInTypesMapping", BindingFlags.NonPublic | BindingFlags.Static);
Debug.Assert(builtInTypesMappingField != null);
var existingMap = ((KeyValuePair<Type, string>[])builtInTypesMappingField.GetValue(null)).ToList();
existingMap.Add(new KeyValuePair<Type, string>(typeof(DateTimeOffset), "Edm.DateTimeOffset"));
existingMap.Add(new KeyValuePair<Type, string>(typeof(DateTimeOffset?), "Edm.DateTimeOffset"));
builtInTypesMappingField.SetValue(null, existingMap.ToArray());