我正在尝试将 Entity Framework 5.0(模型优先方法)与 WCF 数据服务 5.6.2 一起使用,但遇到了以下问题:
当 WCF 数据服务的实体数据模型包含枚举属性时,数据服务将在初始化阶段失败:
The server encountered an error processing the request. The exception message is: "The property 'X' on type 'Y' is of type 'enum-type-here' which is not a supported primitive type."
The exception stack trace is:
System.Data.Services.Providers.ObjectContextServiceProvider.PopulateMemberMetadata(ResourceTypeCacheItem resourceTypeCacheItem, IProviderMetadata workspace, ProviderMetadataCacheItem metadataCacheItem, PrimitiveResourceTypeMap primitiveResourceTypeMap) at System.Data.Services.Providers.ObjectContextServiceProvider.PopulateMetadata(ProviderMetadataCacheItem metadataCacheItem) at System.Data.Services.Providers.BaseServiceProvider.LoadMetadata(Boolean skipServiceOperations) at System.Data.Services.DataService
1.CreateInternalProvider(Object dataSourceInstance) at System.Data.Services.DataService
1.CreateMetadataAndQueryProviders(IDataServiceMetadataProvider& metadataProviderInstance, IDataServiceQueryProvider& queryProviderInstance, Object& dataSourceInstance, Boolean& isInternallyCreatedProvider) at System.Data.Services.DataService1.CreateProvider() at System.Data.Services.DataService
1.HandleRequest() at System.Data.Services.DataService`1.ProcessRequestForMessage(Stream messageBody) at SyncInvokeProcessRequestForMessage(Object , Object[] , Object[] ) at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs) at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc) at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)
only advise我发现解决问题的方法是将此类属性标记为 [NotMapped],但是当我使用此属性注释 T4 生成的类的枚举属性时,它什么也不做,数据服务仍然失败。
也是 WCF DS 的 EF 提供程序 doesn't support System.Data.Services.IgnorePropertiesAttribute仅可用于通过反射提供程序隐藏枚举。
如何使用 WCF 数据服务公开字符串而不是数据库存储的 int 支持的枚举值?
最佳答案
“EF provider for WCF DS doesn't support System.Data.Services.IgnorePropertiesAttribute”和“EF provider also doesn't allow to expose any 'new' properties that aren't in the underlying EDM model”的事实给了我一个悲伤的答案:
不,我们不能使用带有 EF 提供程序的 WCF 数据服务公开枚举,甚至不能为它们公开自定义字符串表示形式。
关于c# - WCF 数据服务是否有任何解决方法来绕过 OData V3 枚举支持的缺失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25680228/