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

Wit*_*ock 8 .net c# 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, 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.CreateProvider() at System.Data.Services.DataService1 parameters) at System.Linq.Expressions.Expression.Lambda[TDelegate](Expression body, Boolean tailCall, IEnumerable1.HandleRequest() at System.Data.Services.DataService1.CreateMetadataAndQueryProviders(IDataServiceMetadataProvider& metadataProviderInstance, IDataServiceQueryProvider& queryProviderInstance, Object& dataSourceInstance, Boolean& isInternallyCreatedProvider) at System.Data.Services.DataService 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.EnsureProviderAndConfigForRequest() at System.Data.Services.DataService1 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.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

JDa*_*awg 8

感谢提示Witbrock.

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

如果要将现有OData服务升级到Entity Framework 6或更高版本,则需要执行以下操作:

  1. 安装WCF数据服务实体框架提供程序 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不再起作用.