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

时间:2013-11-05 00:34:35

标签: c# .net linq wcf odata

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

1 个答案:

答案 0 :(得分:8)

感谢提示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.   
  3. 替换DataService的基本类型。对于EF 5或更低版本,您的数据服务应继承DataService<T>,其中TDbContextObjectContext。对于EF 6或更高版本,您的数据服务应继承EntityFrameworkDataService<T>,其中TDbContext

  4.   

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