为什么我的 WCF 数据服务无法提供自动生成的 ADO.Net EDM



我正在尝试遵循本教程:http://msdn.microsoft.com/en-us/data/gg601462.aspx以设置 ODATA 服务。 我使用向导从我的 SQL Server 数据源创建(使用向导)并 ADO.NET 实体数据模型。

然后,我设置了一个 WCF 数据服务,并告诉它使用这些实体。它没有提供数据,而是产生了一个不透明的服务器错误,我可以通过在服务器类 def 上方添加它来降低不透明:

[System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults = true)]

因此,我实际上可以看到错误。从"通常是java"程序员的角度来看,这看起来像是一个类转换错误。这似乎很奇怪,因为我正在新安装的试用版VS Pro 2013中遵循教程

有人可以理解错误并告诉我如何克服这个问题吗?

The server encountered an error processing the request. The exception message is 'Expression of type 'System.Data.Entity.Core.Objects.ObjectContext' cannot be used for return type 'System.Data.Objects.ObjectContext''. See server logs for more details. The exception stack trace is:

at System.Linq.Expressions.Expression.ValidateLambdaArgs(Type delegateType, Expression& body, ReadOnlyCollection1 parameters) at System.Linq.Expressions.Expression.Lambda[TDelegate](Expression body, String name, Boolean tailCall, IEnumerable 1 参数) at System.Linq.Expressions.Expression.Lambda[TDelegate](Expression body, Boolean tailCall, IEnumerable 1 parameters) at System.Linq.Expressions.Expression.Lambda[TDelegate](Expression body, ParameterExpression[] parameters) at System.Data.Services.Providers.DbContextHelper.CreateDbContextAccessor(Type type) at System.Data.Services.Providers.DbContextHelper.GetDbContextAccessor(Type type) at System.Data.Services.Providers.DbContextHelper.IsDbContextType(Type type) at System.Data.Services.DataService 1.CreateMetadataAndQueryProviders(IDataServiceMetadataProvider&metadataProviderInstance, IDataServiceQueryProvider&queryProviderInstance, Object& dataSourceInstance, Boolean&isInternallyCreatedProvider) at System.Data.Services.DataService 1.CreateProvider() at System.Data.Services.DataService 1.EnsureProviderAndConfigForRequest() 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) atSystem.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc& rpc) at System.S

感谢您的提示 Witbrock。

总结最终解决方案,来自 MSDN:

如果要将现有 OData 服务升级到实体框架 6 或更高版本,则需要执行以下几项操作:

  1. 安装 WCF 数据服务实体框架提供程序 NuGet 包。由于此包依赖于 WCF 数据服务 5.6.0 和实体框架 6 或更高版本,因此项目中的其他一些 NuGet 包也可以升级。

  2. 替换数据服务的基本类型。对于 EF 5 或更低版本,数据服务应继承自DataService<T>,其中 TDbContextObjectContext。对于 EF 6 或更高版本,数据服务应继承自TDbContext EntityFrameworkDataService<T>

注意:链接更新为 beta2 作为 alpha1 不再有效。

最新更新