2011-01-07 12 views
7

Uso un WCF DataService y quiero usar POCOs. Tengo que especificar una DataServiceKey para que funcione (obviamente). Cuando lo hago, tengo que hacer referencia a System.Data.Services.Client (para System.Data.Services.Common), que no se siente muy POCO.WCF DataService, cómo evito [DataServiceKey] en POCOs

¿Hay alguna manera de mantener mis objetos limpios y especificar la clave en otro lugar?

+0

No, no sé de ninguna otra manera. Entonces, o tendrá que aceptar ese único atributo en su clase POCO para hacer uso de esas excelentes funciones, o simplemente no usar los servicios de datos de WCF ... –

+0

No soy tan purista, así que si hay No hay alternativa que lo use, solo quiero asegurarme de que –

Respuesta

10

Si está utilizando un proveedor de reflexión y sus clases no siguen una convención para las propiedades clave, entonces debe usar el atributo DataServiceKey. El proveedor de reflejos es el que obtiene si simplemente proporciona definiciones de clase y clase de contexto para el servicio de datos. Entonces, si no implementa IDataServiceMetadataProvider, es muy probable que utilice un proveedor de reflexión. Es posible utilizar el proveedor de reflexión sin los atributos en sus clases, pero luego los Servicios de datos de WCF aplican una heurística para descubrir las propiedades clave. Dice así:

  • si la clase en cuestión tiene una propiedad llamada ID, es una entidad con el identificador como la única propiedad clave.
  • si la clase se llama por ejemplo cliente y tiene una propiedad llamada CustomerID, es una entidad con la propiedad CustomerID como el único propiedad clave (el nombre de la clase es , obviamente, al igual que la muestra).

No se reconocen otras propiedades clave sin el atributo DataServiceKey. Esto también se describe, por ejemplo, en este blog: http://blogs.msdn.com/b/alexj/archive/2010/06/11/tip-56-writing-an-odata-service-using-the-reflection-provider.aspx

Es posible utilizar clases 100% POCO con propiedades de clave arbitrarias, pero luego tendría que implementar un proveedor personalizado. Esto es mucho más trabajo ya que tiene que definir la forma de sus clases programáticamente. Puede encontrar un ejemplo de tutorial de proveedor personalizado aquí: http://blogs.msdn.com/b/alexj/archive/2010/01/07/data-service-providers-getting-started.aspx

+0

sea excelente, eso es lo que estaba buscando. ¡Gracias! –

Cuestiones relacionadas