8

我正在尝试按照本教程: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, IEnumerable1 parameters) at System.Linq.Expressions.Expression.Lambda[TDelegate](Expression body, Boolean tailCall, IEnumerable1 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.DataService1.CreateMetadataAndQueryProviders(IDataServiceMetadataProvider& metadataProviderInstance, IDataServiceQueryProvider& queryProviderInstance, Object& dataSourceInstance, Boolean& isInternallyCreatedProvider) at System.Data.Services.DataService1.CreateProvider() at System.Data.Services.DataService1.EnsureProviderAndConfigForRequest() at System.Data.Services.DataService1.HandleRequest() at System.Data.Services.DataService1.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.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

4

1 回答 1

8

感谢威特布鲁克的提示。

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

如果要将现有的 OData 服务升级到 Entity Framework 6 或更高版本,则需要做几件事:

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

  2. 替换 DataService 的基本类型。对于 EF 5 或更低版本,您的数据服务应继承自DataService<T>whereT是 aDbContextObjectContext。对于 EF 6 或更高版本,您的数据服务应继承自EntityFrameworkDataService<T>where Tis a DbContext.

注意: 链接更新到 beta2,因为 alpha1 不再起作用。

于 2014-01-09T18:20:21.713 回答