【问题标题】:Why is my WCF Data Service not able to serve an automatically generated ADO.Net EDM?为什么我的 WCF 数据服务无法为自动生成的 ADO.Net EDM 提供服务?
【发布时间】:2013-11-05 00:34:34
【问题描述】:

我正在尝试学习本教程: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:

在 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, IEnumerable@987654326 @1.CreateMetadataAndQueryProviders(IDataServiceMetadataProvider& metadataProviderInstance, IDataServiceQueryProvider& queryProviderInstance, Object& dataSourceInstance, Boolean& isInternallyCreatedProvider) 在 System.Data.Services.DataService1.CreateProvider() at System.Data.Services.DataService1.EnsureProviderAndConfigForRequest() 在 System.Data.Services.DataService1.HandleRequest() at System.Data.Services.DataService1.ProcessRequestForMessage(Stream messageBody ) 在 SyncInvokeProcessRequestForMessage(Object , Object[] , Object[] ) 在 System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] 输入, Object[]& 输出) 在 System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin( MessageRpc& rpc) 在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc) 在System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc& rpc) 在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc) 在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc) 在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime。 ProcessMessage3(MessageRpc& rpc) 在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc& rpc) 在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc) 在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc& rpc) 在 System。小号

【问题讨论】:

标签: c# .net linq wcf odata


【解决方案1】:

感谢 Witbrock 的提示。

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

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

  1. 安装WCF Data Services Entity Framework Provider NuGet 包。由于此包依赖于 WCF Data Services 5.6.0 和 Entity Framework 6 或更高版本,因此您项目中的其他一些 NuGet 包也可能会升级。

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

注意:链接已更新至 beta2,因为 alpha1 不再有效。

【讨论】:

  • 看起来 alpha2 现在也过时了,我升级到最新版本(beta2),它似乎工作正常。如果直接进入页面,没有版本号,只会加载最新版本:nuget.org/packages/Microsoft.OData.EntityFrameworkProvider
  • 感谢 BrainSlugs83。我也更新了答案中的链接,以免误入歧途。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-26
  • 2019-03-02
  • 2013-01-27
  • 2013-05-18
相关资源
最近更新 更多