2010-10-05 15 views
6

Sto creando un servizio OData con WCF Data Services utilizzando un EDMX. Come posso creare una proprietà calcolata per un tipo di entità, in modo che il suo valore venga calcolato nel servizio (C#) e non provenga dal database?
Il valore di questa proprietà si basa sul valore di altre proprietà, che sono mappate ai campi nel database.Come creare una proprietà calcolata in Data Services (OData)?

risposta

2

La soluzione che ho trovato è l'utilizzo di Entity Framework Code First invece di un EDMX. Permette di creare proprietà calcolate semplicemente creando proprietà standard nel codice.
Ecco un esempio:

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

Purtroppo, è adatto solo per Reflection Provider che fornisce servizi di generazione dati in sola lettura. –

2

Se si sta esponendo il file EDMX direttamente, utilizzando il provider Entity Framework predefinito per Data Services, qualcosa di simile:

public class MyService: DataService<MyEntities> { 

Poi, purtroppo, non è possibile esporre eventuali 'nuovi' proprietà che non sono nel modello EDM di Entity Framework sottostante.

Avendo detto che ci sono altre opzioni, è possibile scrivere un fornitore di riflessione o un fornitore personalizzato che aggiunge la proprietà extra e delega la maggior parte del lavoro a EF sotto il cofano.

Il problema sta configurando tutta la delegazione NON è facile oggi.

Questo series of posts spiega i provider e mostra come creare un servizio basato su provider personalizzato e questo one shows come creare un servizio utilizzando il fornitore di Reflection.

+0

Grazie Alex. Contrassegnerò la tua risposta come risposta accettata, sebbene abbia trovato una soluzione più semplice: invece di usare un EDMX, utilizzo dapprima il codice di Entity Framework; mi ha permesso di creare proprietà calcolate semplicemente creando proprietà nel codice. Lo documenterò in un post sul blog. – Fabrice

Problemi correlati