2010-09-11 12 views
8

Sono in procinto di creare un'API più o meno allo stesso modo Hanselman showed it could be done for Stackoverflow. Ho un mucchio EntityObject classi Entity Framework generate e un thingy DataService per serializzarle su Atom e JSON. Vorrei esporre alcune proprietà generate tramite il servizio web. Pensa FullName come generato concatenando First e LastName (ma alcuni sono più complessi). Ho aggiunto questi a una classe parziale che estende Entity Framework EntityObject e gli ho dato l'attributo [DataMember], ma non si presentano nel servizio. Ecco un attributo esempio (set è gettato in buona misura, non funziona senza neanche):, serializzare proprietà aggiuntive dalle classi parziali Entity Framework

[DataMember] 
public string FullName 
{ 
    get 
    { 
     return (this.FirstName ?? "") + " " + (this.LastName ?? ""); 
    } 
    set { } 
} 

Secondo thesediscussions sul forum MSDN, questo è un problema noto. Qualcuno ha trovato soluzioni efficaci o qualcuno ha suggerimenti per alternative?

+4

Non è la risposta, ma come questione di stile non è necessario pronunciare "Attributo" quando si utilizza un attributo. '[DataMember]' è tutto ciò di cui hai bisogno. –

risposta

0

Ho avuto lo stesso problema nell'esporre gli oggetti Entity su un servizio WCF e ho utilizzato la soluzione alternativa a here che consiste nell'aggiungere il seguente attributo alle proprietà per forzare la loro serializzazione.

[global::System.Runtime.Serialization.DataMemberAttribute()] 

Non ho trovato alcun modo "bello" per ottenere questo funzionamento.

Ad esempio, dato un'entità chiamata dell'insegnante con i campi Titolo, nome e cognome è possibile aggiungere una classe parziale per Maestro qualcosa di simile:

public partial class Teacher 
{ 
    [global::System.Runtime.Serialization.DataMemberAttribute()] 
    public string FullName 
    { 
     get { return string.Format("{0} {1} {2}", Title, Forenames, Surname); } 
     set { } 
    } 
} 

Poi, finché i tuoi servizio WCF riferimenti di interfaccia Questa classe allora il le proprietà extra sono serializzate e disponibili per gli utenti del servizio.

ad es.

[OperationContract] 
List<Teacher> GetTeachers(); 
+0

hm, non sembra funzionare comunque. Quali entità stai serilizzando? – friism

+0

Ho aggiunto un esempio più dettagliato alla risposta sopra. – Nelson

+0

Penso che questo richieda l'utilizzo di EF4. @ Nelson - puoi confermare che hai .NET Framework 4.0? – Antony

Problemi correlati