ADO.NET Entity Framework funktioniert nicht mit Ajax-Diensten

Wieder mal eine Beschränkung in der aktuellen Version des ADO.NET Entity Framework gefunden: Ein per ADO.NET Entity Framework gemapptes kann man nicht per JSON serialisieren, um es von Ajax-Webseiten zu nutzen.

In Pocket speichern vorlesen Druckansicht 1 Kommentar lesen
Lesezeit: 1 Min.
Von
  • Dr. Holger Schwichtenberg

Das hat mich heute einige Zeit gekostet: Ich wollte einen WCF-Dienst (Windows Communication Foundation) schreiben, der per ADO.NET Entity Framework gemappt Objekte an JavaScript liefert.

Also habe ich mit der Vorlage "AJAX-enabled WCF Service" in Visual Studio 2008 einen neuen Dienst mit dem webHttpBinding erstellt und so implementiert:

[ServiceContract(Namespace = "www.IT-Visions.de")]
[AspNetCompatibilityRequirements(RequirementsMode =
AspNetCompatibilityRequirementsMode.Allowed)]
public class DIENST
{
[OperationContract]
public List<DATENKLASSE> GetData(string Filter)
{
return BL.GetData(Filter);
}
}

Dabei verwendet GetData() LINQ-to-Entities zum Datenzugriff. Leider liefert der so implementierte Webservice keine Daten. Die Microsoft AJAX Library meldete nur "The Server Method 'GetData' failed". Im Fiddler sah man, dass der Dienst nicht antwortet. Im Debugger aber lief die Methode GetData() einwandfrei durch.

Des Rätsels Lösung fand ich dann beim Googeln: In der aktuellen Version von .NET lässt sich ein per EF gemapptes Objekt nicht mit dem [codeDataContractJsonSerializer[/code] serialisieren].

Zum Umgehung des Problems muss man also die Daten vor dem Absenden in ein einfaches .NET-Objekt (POCO) umkopieren. Was freue ich mich schon auf das ADO.NET Entity Framework 2.0 in .NET 4.0, das dann auch POCOs direkt unterstützt. ()