c# - WCF 数据服务是否有任何解决方法来绕过 OData V3 枚举支持的缺失?

标签 c# wcf enums wcf-data-services

我正在尝试将 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.DataService1.CreateInternalProvider(Object dataSourceInstance) at System.Data.Services.DataService1.CreateMetadataAndQueryProviders(IDataServiceMetadataProvider& metadataProviderInstance, IDataServiceQueryProvider& queryProviderInstance, Object& dataSourceInstance, Boolean& isInternallyCreatedProvider) at System.Data.Services.DataService1.CreateProvider() at System.Data.Services.DataService1.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/

相关文章:

java - 如何检查枚举值是否等于?

c# - 为什么访问枚举定义中不存在的枚举成员(通过转换整数)不会出错

java - 通过 Java 枚举值填充 XML 文件中的属性值

c# - 为什么我会收到 403?

c# - 什么是 WCF RIA 服务?

c# - AppFapric 是否成熟可用于生产

wcf - 'WCF' 是什么意思?

c# - 即使文件存在于我的路径中,File.Exist 条件在 asp.net 中不起作用

c# - 通过 ASP.NET JSON 返回阿拉伯文本

c# - 如何在运行时检查操作系统版本,例如在 Windows 或 Linux 上,不使用条件编译语句