我正在尝试将实体框架5.0(模型优先方法)与WCF数据服务5.6.2一起使用,遇到了以下问题:
当WCF数据服务的实体数据模型包含Enum属性时,数据服务将在初始化阶段失败:
服务器在处理请求时遇到错误。异常消息为:“类型“Y”上的属性“X”的类型为“enum type here”,该类型不是受支持的基元类型。”
异常堆栈跟踪为:
System.Data.Services.Providers.ObjectContextServiceProvider.PopulateMemberMetadata(ResourceTypeCacheItem
resourceTypeCacheItem,IProviderMetadata工作区,
提供程序元数据缓存项元数据缓存项,PrimitiveResourceTypeMap
位于System.Data.Services.Providers.ObjectContextServiceProvider.PopulateMetadata(ProviderMetadataCacheItem
metadataCacheItem)位于
System.Data.Services.Providers.BaseServiceProvider.LoadMetadata(布尔值
skipServiceOperations)位于
System.Data.Services.DataService
1.CreateInternalProvider(Object
dataSourceInstance) at System.Data.Services.DataService
1.创建元数据和查询提供程序(IDataServiceMetadataProvider&
metadataProviderInstance、IDataServiceQueryProvider&
queryProviderInstance,对象&数据源实例,布尔型&
isInternalyCreatedProvider)位于
System.Data.Services.DataService
1.CreateProvider() at
System.Data.Services.DataService
1.HandleRequest()位于
System.Data.Services.DataService`1.ProcessRequestForMessage(流
messageBody)在SyncInvokeProcessRequestForMessage(对象,对象[],
对象[])位于
System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(对象
实例,对象[]输入,对象[]&输出)
System.ServiceModel.Datcher.DispatchOperationRuntime.InvokeBegin(MessageRpc&
rpc)位于
System.ServiceModel.Datcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc&
rpc)位于
System.ServiceModel.Datcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc&
rpc)在System.ServiceModel.Dispatcher.MessageRpc.Process(布尔
isOperationContextSet)
这个
only advise
我发现要解决这个问题的方法是将这样的财产标记为[NotMapped],但当我用这个属性注释T4生成类的枚举财产时,它什么也不做,数据服务仍然失败。
也是WCF DS的EF提供程序
doesn't support System.Data.Services.IgnorePropertiesAttribute
只能使用反射提供程序来隐藏枚举。
如何使用WCF数据服务公开字符串而不是DB存储的int支持的枚举值?