2010-10-05 8 views
6

Ich erstelle einen OData-Service mit WCF Data Services mit einem EDMX. Wie kann ich eine berechnete Eigenschaft für einen Entitätstyp erstellen, so dass ihr Wert im Service (C#) berechnet wird und nicht von der Datenbank kommt?
Der Wert dieser Eigenschaft basiert auf dem Wert anderer Eigenschaften, die Feldern in der Datenbank zugeordnet sind.Wie erstellt man eine berechnete Eigenschaft in Data Services (OData)?

Antwort

2

Die Lösung, die ich gefunden habe, ist die Verwendung von Entity Framework Code First anstelle von EDMX. Sie können berechnete Eigenschaften einfach durch Erstellen von Standardeigenschaften im Code erstellen.
Hier ist ein Beispiel:

public class Person 
{ 
    public String FirstName { get; set; } 
    public String LastName { get; set; } 
    public String FullName 
    { 
    get { return FirstName + " " + LastName; } 
    } 
} 
+0

Leider ist es nur für Reflection Provider geeignet, die einen schreibgeschützten Datendienst bereitstellen können. –

2

Wenn Sie Belichtung direkt Ihre EDMX-Datei für Data Services den Standard Entity Framework Provider verwenden, etwa so:

public class MyService: DataService<MyEntities> { 

Dann können Sie leider keine ‚neuen‘ Eigenschaften verfügbar machen, die nicht sind im zugrunde liegenden Entity Framework EDM-Modell.

Nachdem Sie gesagt haben, dass Sie andere Optionen haben, könnten Sie einen Reflektionsanbieter oder benutzerdefinierten Anbieter schreiben, der die zusätzliche Eigenschaft hinzufügt und den Großteil der Arbeit an EF unter der Haube delegiert.

Das Problem ist die Einrichtung der Delegation ist nicht einfach heute.

Diese series of posts erläutert Anbieter und zeigt, wie ein benutzerdefinierter Provider-basierter Dienst erstellt wird, und dieses one shows wie Sie einen Dienst erstellen, der den Reflection Provider verwendet.

+0

Dank Alex. Ich werde Ihre Antwort als akzeptierte Antwort markieren, obwohl ich eine einfachere Lösung gefunden habe: Anstatt einen EDMX zu verwenden, verwende ich Entity Framework Code First; Dadurch konnte ich berechnete Eigenschaften erstellen, indem ich einfach Eigenschaften im Code erstellte. Ich werde dies in einem Blogbeitrag dokumentieren. – Fabrice

Verwandte Themen