¿Cuál es la forma más sencilla de convertir un Servicios de Datos de WCF OData proveedor de Web API?

StackOverflow https://stackoverflow.com/questions/19825159

Pregunta

Actualmente estoy viendo la viabilidad de la conversión de nuestros actuales Servicios de Datos de WCF OData proveedor de Web API de OData.

Estoy un poco confundido en el OData implementación de la API de Web.Con Servicios de Datos de WCF se asienta sobre la parte superior de nuestro ADO.Net modelo de entidad que expone un montón de tablas de SQL Server backend, es decir,dar WCFDS el modelo de ADO para generar y, a continuación, usted tiene acceso a todas las tablas a través de la norma de OData sintaxis.

Con la API de Web de lectura tan lejos debemos crear un controlador o acciones separadas para cada tabla/objeto que queremos exponer?Me estoy perdiendo algo?Hay sólo un camino donde el OData Web de la API de controlador sólo puede exponer todo el modelo de la ADO modelo de Datos?Tener que crear una acción para cada tabla sería un lío y overkill.

En la actualidad, si tenemos que añadir una tabla que acabamos de mapa en el EDMX y WCFDS automáticamente exponerlo como es asignado a todo el contexto de la modelo.

¿Fue útil?

Solución

Generar el modelo(s)

Usted puede:

  • El uso de la convenio modelo de generador de de ASP.NET Web API.Esto genera un modelo diferente de lo que EF de la propia convención modelo de generador produce:un EdmLib IEdmModel.Ver esta pregunta aunque si está utilizando el modelo de primera o de base de datos en primer lugar.Este método parece muy atrás, y lo es, pero en su mayoría obras.
  • Serializar el modelo de EF y reconstruirlo como un IEdmModel (ver esta pregunta).De nuevo, esto es muy ineficiente.Si usted está utilizando el modelo de primer o base de datos-en primer lugar, usted querrá sólo deserializar el archivo EDMX para construir el IEdmModel.Todavía produce un modelo diferente internamente, pero al menos el CDSL es más estable formato de código CLR convenios, por lo que probablemente tienen menos sorpresas que se obtendría cuando el uso de dos diferentes convención basada en el modelo de los constructores.

La razón de esto es que ASP.NET Web de la API de OData extensiones de uso EdmLib, mientras que EF utiliza su propio código, y no hay ningún plan para hacerlos trabajar juntos.Tal vez usted encontrará esta diatriba útil si tienes curiosidad.

Trabajando en la API

Una vez generado el modelo a partir de una única fuente (de modo que usted puede trabajar en su modelo a partir de un solo lugar), usted realmente tiene que crear un controlador por cada entidad, básicamente.El punto de la API de Web no es la de construir cosas "automágicamente", sino para ofrecer flexibilidad a los desarrolladores.El EntitySetController ayuda a la reducción de la redundancia, pero no ofrecen de todo, fuera de la caja.

Tomando un paso atrás

En la diatriba se mencionó anteriormente, también hablo sobre la diferencia entre un servicio de la capa de API y una la capa de datos La API.ASP.NET Web API es más adecuado para los servicios, mientras que OData hace que los servicios de torpe.Por otro lado, OData hace que los datos de acceso de una brisa (siendo esencialmente como un Descanso SQL) y por el hecho de estar conectado directamente con el modelo de datos, puede automatizar un montón de cosas, como se vio con Servicios de Datos de WCF.ASP.NET Web API con OData extensiones se sienta en el medio, y su valor no es universalmente acordados (el uso de ciertos bits de OData sintaxis URI en la Api de servicio es sin duda útil aunque).

No demasiado acentuados por los recientes rumores que giran alrededor de ASP.NET Web de la API, y Servicios de Datos de WCF son muy diferentes de las bestias y se ejecutan en diferentes capas en su diseño.De hecho, en una arquitectura de varios niveles, se puede muy bien ver a un servicio de API construida utilizando ASP.NET la API de Web sentado en la cima de un OData API construido el uso de Servicios de Datos de WCF.

Mi consejo es pensar cuidadosamente acerca de lo que usted está tratando de construir, y dependiendo de la respuesta, o bien elija ASP.NET API Web y aceptar el hecho de que la API de exponer será muy diferente de una centrada en los datos OData API, o un palo con Servicios de Datos de WCF.

Un posible plan

Usted puede encontrar una gran cantidad de material en la web acerca de los servicios de la capa de Api en la web mediante la búsqueda de términos como "no-CRUD web/Descanso/hipermedia API" o mediante la comparación de productos como ServiceStack, que abogan por la menor cantidad de datos orientada a la Api.

Si usted todavía no está seguro acerca de la naturaleza de su proyecto, prototipo.

  • Si usted termina con un montón de esencialmente idénticos a los controladores con la API de Web, cada una asignada a exactamente una entidad, entonces su API está fuertemente orientada a datos. Ir con Servicios de Datos de WCF.
  • Si usted termina con un montón de OData Acciones y torpe entidades con Servicios de Datos de WCF, entonces usted necesita más lógica de dominio en el servidor de la API, y los datos de orientación no ofrece suficiente. Vaya con la API de Web.Una buena regla de oro aquí es tratar de OData acciones como tratan los procedimientos almacenados en SQL DBMS.En realidad, el tratamiento de cualquier OData server como gestor de base de datos, porque eso es lo que son. Si usted no diría que detrás de una interfaz de SQL, no la pongas detrás de un OData interfaz.

Importante (Actualización)

Se anunció el 27 de Marzo de 2014 que los Servicios de Datos de WCF sería descontinuado por Microsoft en favor de ASP.NET Web API.Para manejar la "capa de datos" casos de uso que he expuesto aquí, Microsoft ha dicho que planea ampliar ASP.NET Web API.Algunos la comunidad los esfuerzos también están en marcha.Servicios de Datos de WCF también ser de código abierto, en algún momento, así que no es imposible que un nuevo mantenedor se toma de posesión, aunque es incierto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top