Erzeugen der Modell (en)
Du kannst:
- Verwenden Sie das Convention Model Builder Von ASP.NET Web API. Dies erzeugt ein anderes Modell als das, was EFs eigenes Kongressmodellbuilder erzeugt: ein EDMLIB
IEdmModel
. Sehen diese Frage Wenn Sie jedoch Modell-First- oder Datenbank-First verwenden. Diese Methode scheint wirklich rückwärts zu sein, und sie ist es, aber sie funktioniert meistens. - Serialisieren Sie das EF -Modell und bauen Sie es als eine wieder auf
IEdmModel
(sehen diese Frage). Auch dies ist wirklich ineffizient. Wenn Sie Modell-First- oder Datenbank-First verwenden, möchten Sie die EDMX-Datei nur deserialisieren, um die zu erstellenIEdmModel
. Es produziert immer noch ein anderes Modell intern, aber zumindest das CDSL ist ein stabileres Format als CLR-Codekonventionen. Sie werden also wahrscheinlich weniger Überraschungen haben als Sie erhalten, wenn Sie zwei verschiedene Kongressbasis-Modellbauer verwenden.
Der Grund dafür ist, dass ASP.NET -Web -Api -Erweiterungen EDMLIB verwenden, während EF seinen eigenen Code verwendet und Es gibt keinen Plan, um sie zusammenzuarbeiten. Vielleicht wirst du es finden Dieser Scherz Nützlich, wenn Sie neugierig sind.
Arbeiten an der API
Sobald Sie das Modell aus einer einzigartigen Quelle generiert haben (damit Sie von einem einzelnen Ort von Ihrem Modell aus arbeiten können), müssen Sie im Grunde genommen einen Controller pro Entität erstellen. Der Punkt der Web -API besteht nicht darin, Dinge automatisch zu erstellen, sondern dem Entwickler Flexibilität zu bieten. Das EntitySetController
Hilft bei der Reduzierung der Redundanz, aber es bietet nicht alles außerhalb der Schachtel.
Einen Schritt zurücktreten
In der oben genannten Rant spreche ich auch über den Unterschied zwischen a Service-Schicht API und a Datenschicht API. Die ASP.NET -Web -API ist besser für Dienste geeignet, während Odata Dienste unangenehm macht. Andererseits macht ODATA Daten zu einem Kinderspiel (im Wesentlichen wie ein erholsamer SQL) und kann aufgrund der direkten Anleihe an das Datenmodell eine Menge Dinge automatisieren, wie Sie es mit WCF -Datendiensten gesehen haben. Die ASP.NET -Web -API mit ODATA -Erweiterungen befindet sich in der Mitte, und sein Wert ist nicht allgemein vereinbart (unter Verwendung bestimmter Teile der Odata -URI -Syntax auf Service -APIs ist jedoch sicherlich nützlich).
Lassen Sie sich nicht zu sehr von der jüngsten Begeisterung um ASP.NET -Web -API und WCF -Datendienste auswirken. In einer mehrstufigen Architektur könnten Sie sehr gut eine Service-API sehen, die mit der ASP.NET-Web-API erstellt wurde, die auf einer mit WCF-Datendiensten erstellten ODATA-API sitzt.
Mein Rat ist sorgfältig darüber nachzudenken, was Sie erstellen möchten, und je nach der Antwort wählen Sie entweder die ASP.NET-Web-API und nehmen Sie die Tatsache an mit WCF -Datendiensten.
Ein möglicher Plan
Im Internet finden Sie im Web viel Material über Service-Layer-APIs im Internet, indem Sie nach Begriffen wie "Nicht-Crud-Web/RESTful/Hypermedia-API" suchen oder Produkte wie Servicestack vergleichen, die sich für weniger datenorientierte APIs einsetzen.
Wenn Sie sich über die Art Ihres Projekts immer noch nicht sicher sind, Prototype es.
- Wenn Sie mit einer Web-API eine Reihe von im Wesentlichen identischen Controllern haben, die jeweils genau einer Entität zugeordnet sind, ist Ihre API stark datenorientiert. Gehen Sie mit WCF -Datendiensten.
- Wenn Sie viele ODATA-Aktionen und unangenehme Entitäten mit WCF-Datendiensten haben, benötigen Sie mehr Domänenlogik auf der Serverseite der API, und die Datenorientierung bietet Ihnen nicht genug. Gehen Sie mit Web -API. Eine gute Faustregel hier ist die Behandlung von ODATA -Aktionen, genau wie Sie gespeicherte Verfahren in einem SQL -DBMS behandeln. Behandeln Sie tatsächlich einen ODATA -Server als DBMS, denn das sind sie. Wenn Sie es nicht hinter eine SQL -Schnittstelle setzen würden, stellen Sie es nicht hinter eine Odata -Schnittstelle.
Wichtig (Update)
Es wurde am 27. März 2014 bekannt gegeben, dass WCF Data Services sein würden abgesetzt von Microsoft zugunsten der ASP.NET -Web -API. Um die hier aufgedeckten "Data-Layer" -Einnutzungen zu verarbeiten, hat Microsoft bekannt, dass die ASP.NET-Web-API erweitert wird. Etwas Gemeinschaft Bemühungen sind auch im Gange. Die WCF-Datendienste werden auch irgendwann offen gesäubert, sodass es nicht unmöglich ist, dass ein neuer Betreuer übernommen wird, obwohl dies ungewiss ist.