升级到EF 6(RTM)-获取System.Data.Entity.Core.Objects.ObjectContext不能用于返回类型System.Data.Objects

巨化器

刚刚升级了.NET 4.5 WCF服务,该服务还具有使用EF 6的OData服务。OData服务当然在升级之前就可以使用。现在,当尝试查询OData服务或什至只是从Visual Studio 2012浏览到它时,我收到以下请求错误

服务器在处理请求时遇到错误。异常消息是“类型为System.Data.Entity.Core.Objects.ObjectContext的表达式”不能用于返回类型为“ System.Data.Objects.ObjectContext”。有关更多详细信息,请参见服务器日志。

异常堆栈跟踪为:

at System.Linq.Expressions.Expression.ValidateLambdaArgs(Type delegateType, Expression& body, ReadOnlyCollection`1 parameters)
at System.Linq.Expressions.Expression.Lambda[TDelegate](Expression body, String name, Boolean tailCall, IEnumerable`1 parameters)
at System.Data.Services.Providers.DbContextHelper.CreateDbContextAccessor(Type type)
at System.Data.Services.Providers.DbContextHelper.GetDbContextAccessor(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.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)
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.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)

ODataLib是5.6,EF是6.0.1,WCF数据服务服务器是5.6。

这个问题没有帮助。我从这里也做了所有事情,没有运气。没有提及System.Data.Entity我该怎么做才能克服这个问题?

ne

使用WCF数据服务实体框架提供程序

有关更多信息,请参阅将WCF数据服务5.6.0与Entity Framework 6+一起使用。

结合使用WCF数据服务5.6.0和Entity Framework 6+

现在,有了一些激动人心的消息:您终于可以将WCF数据服务与Entity Framework 6+一起使用!今天,我们正在上传一个名为WCF数据服务实体框架提供程序的新NuGet程序包此NuGet程序包弥合了WCF数据服务5.6.0和Entity Framework 6+之间的鸿沟。由于我们最近进行的公共提供程序工作,我们能够将该提供程序构建为带外提供程序(即,与核心WCF DS堆栈分开提供的提供程序)。

将现有的OData服务升级到EF 6

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

  1. 安装WCF数据服务实体框架提供程序NuGet程序包。由于此程序包依赖于WCF Data Services 5.6.0和Entity Framework 6或更高版本,因此您项目中的某些其他NuGet程序包也可能会升级。
  2. 替换您的DataService的基本类型。对于EF 5或更低版本,您的数据服务应从aDataService<T>那里继承对于EF大于或等于6,你的数据服务应该继承哪里有关更多详细信息,请参见下面的DataService和EntityFrameworkDataService有什么区别TDbContextObjectContextEntityFrameworkDataService<T>TDbContext

使用EF 6创建新的OData服务

如果要创建新的OData服务,并且想使用Entity Framework 6或更高版本,则需要遵循类似的步骤:

  1. 创建您的新项目。我通常为此使用ASP.NET空Web应用程序,但是您可以使用任何您想要的东西。请注意,如果您确实使用了空模板,则可能需要App_Data为Entity Framework创建一个文件夹才能与LocalDB一起正常使用。
  2. 安装WCF数据服务实体框架提供程序NuGet程序包。由于此程序包依赖于WCF Data Services 5.6.0和Entity Framework 6或更高版本,因此您项目中的某些其他NuGet程序包也可能会升级。
  3. 添加一个新的WCF数据服务。最好确保您的工具是最新的,因为我们偶尔会修复项目模板中的错误。我们最新的工具安装程序与WCF DS 5.6.0一起发布。可以在这里下载
  4. 替换由项目模板生成的DataService的基本类型。对于EF大于或等于6,你的数据服务应该继承EntityFrameworkDataService<T>哪里TDbContext有关更多详细信息,请参见下面的DataService和EntityFrameworkDataService有什么区别

DataService<T>之间有什么区别EntityFrameworkDataService<T>

从历史上看,WCF DS堆栈要求所有基于WCF DS的OData服务都必须从继承DataService<T>在内部,数据服务将确定服务应使用内置EF提供程序,内置反射提供程序还是自定义提供程序。当我们添加了对EF 6的支持时,我们利用了新的公共提供程序功能,以允许提供程序单独发货。例如,这将使我们能够将WCF DS 5.6.0与EF 5、6或某些将来的版本一起使用。但是,新的公共提供程序功能附带一些您需要编写的代码。由于每个默认的EF 6 WCF DS提供程序的代码都应该相同,因此我们继续提供了一个为您执行此操作的类。EntityFrameworkDataService<T>继承自DataService<T>并实现否则需要实现的所有代码。通过提供此附加类,我们从字面上使升级过程像更改服务的基本类型一样简单。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档