2010-10-05 15 views
6

Estoy creando un servicio OData con WCF Data Services usando un EDMX. ¿Cómo puedo crear una propiedad calculada para un tipo de entidad, de modo que su valor se compute en el servicio (C#) y no provenga de la base de datos?
El valor de esta propiedad se basa en el valor de otras propiedades, que se asignan a campos en la base de datos.¿Cómo crear una propiedad calculada en los servicios de datos (OData)?

Respuesta

2

La solución que encontré es utilizar Entity Framework Code First en lugar de un EDMX. Le permite crear propiedades calculadas simplemente creando propiedades estándar en el código.
Aquí se muestra un ejemplo:

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

Lamentablemente, solo es adecuado para Reflection Provider que brinda capacidad de lectura de solo lectura Servicio de datos. –

2

Si usted está exponiendo su archivo EDMX directamente, usando el valor por defecto del proveedor Marco de la entidad de servicios de datos, algo como esto:

public class MyService: DataService<MyEntities> { 

Entonces, lamentablemente no se puede exponer a ningún 'nuevas' propiedades que no están en el modelo subyacente de EDM de Entity Framework.

Habiendo dicho que tiene otras opciones, puede escribir un proveedor de reflejo o un proveedor personalizado que agregue la propiedad adicional y delegue la mayor parte del trabajo en EF bajo el capó.

El problema es configurar toda la delegación NO es fácil hoy.

Este series of posts explica los proveedores y muestra cómo crear un servicio personalizado basado en el proveedor, y esto one shows cómo crear un servicio utilizando el proveedor de reflejos.

+0

Gracias Alex. Marcaré su respuesta como la respuesta aceptada, aunque encontré una solución más fácil: en lugar de usar un EDMX, utilizo Entity Framework Code First; me permitió crear propiedades computadas simplemente creando propiedades en el código. Documentaré esto en una publicación de blog. – Fabrice

Cuestiones relacionadas