Ich versuche, diesem Tutorial zu folgen: Ссылка einen ODATA-Dienst einrichten. Ich erstellte (mithilfe des Assistenten) und ADO.NET Entity Data Model aus meiner SQL Server-Datenquelle mithilfe des Assistenten.
Dann habe ich einen WCF-Datenservice eingerichtet und ihm gesagt, er solle die Entitäten verwenden. Anstatt die Daten zu liefern, erzeugte es einen undurchsichtigen Serverfehler, den ich weniger undurchsichtig machen konnte, indem ich dies über der Serverklasse def hinzufügte:
[System.ServiceModel.ServiceBehavior (IncludeExceptionDetailInFaults = true)]
Und deshalb kann ich den Fehler tatsächlich sehen. Aus der Perspektive eines "normalerweise Java" -Programmierers sieht dies wie ein Klassenwurffehler aus. Was seltsam erscheint, da ich das Tutorial in einer neu installierten Testversion von VS Pro 2013 befolge.
Kann jemand den Fehler verstehen und mir sagen, wie ich darüber hinwegkommen soll?
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 & amp; body, ReadOnlyCollection 1 parameters) at System.Linq.Expressions.Expression.Lambda[TDelegate](Expression body, String name, Boolean tailCall, IEnumerable
1 Parameter) bei System.Linq.Expressions.Expression.Lambda [TDelegate] (Ausdruck Körper, 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.CreateMetadataAndQueryProviders (IDataServiceMetadataProvider & amp; metadataProviderInstance, IDataServiceQueryProvider & amp; queryProviderInstance, Object & amp; dataSourceInstance, Boolean & amp; isInternallyCreatedProvider) bei System.Data.Services.DataService 1.CreateProvider() at System.Data.Services.DataService
1.EnsureProviderAndConfigForRequest () at System.Data.Services.DataService 1.HandleRequest() at System.Data.Services.DataService
1 .ProcessRequestForMessage (Stream messageBody) bei SyncInvokeProcessRequestForMessage (Object, Object [], Object []) bei System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke (Object-Instanz, Object [] Inputs, Object [] & amp; Outputs) bei System.ServiceModel. Dispatcher.DispatchOperationRuntime.InvokeBegin (MessageRpc & amp; rpc) bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5 (MessageR PC & amp; rpc) bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41 (MessageRpc & amp; rpc) bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4 (MessageRpc & amp; rpc) bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31 (MessageRpc & amp; rpc) bei System. ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3 (MessageRpc & amp; rpc) bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2 (MessageRpc & amp; rpc) bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11 (MessageRpc & amp; rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime .ProcessMessage1 (MessageRpc & amp; rpc) bei System.S
Danke für den Tipp Witbrock.
Um die endgültige Lösung zusammenzufassen, MSDN :
Wenn Sie einen vorhandenen OData-Service auf Entity Framework 6 oder höher aktualisieren, müssen Sie einige Dinge tun:
Installieren Sie das WCF Data Services Entity Framework-Anbieter NuGet-Paket. Da dieses Paket eine Abhängigkeit von WCF Data Services 5.6.0 und Entity Framework 6 oder höher aufweist, können auch einige andere NuGet-Pakete in Ihrem Projekt aktualisiert werden.
Ersetzen Sie den Basistyp Ihres DataService. Für EF 5 oder darunter sollte Ihr Datendienst von
DataService<T>
erben, wobeiT
fürDbContext
oderObjectContext
steht. Für EF 6 oder höher sollte Ihr Datendienst vonEntityFrameworkDataService<T>
erben, wobeiT
fürDbContext
steht.
HINWEIS: Der Link wurde auf beta2 aktualisiert, da alpha1 nicht mehr funktioniert.