2010-09-11 16 views
8

Estoy en el proceso de crear una API de la misma manera Hanselman showed it could be done for Stackoverflow. Tengo un montón de EntityObject clases generadas por Entity Framework y una cosa DataService para serializarlas a Atom y JSON. Me gustaría exponer algunas propiedades generadas a través del servicio web. Piensa en FullName como se genera al concatenar First- and LastName (pero algunos son más complejos). Los he agregado a una clase parcial que amplía el EntityObject de Entity Framework y les he dado el atributo [DataMember], pero no aparecen en el servicio. He aquí un ejemplo de atributos (set se lanza en una buena medida, no funciona sin él tampoco):WCF Data Service, serialice propiedades adicionales de las clases parciales de Entity Framework

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

Según thesediscussions en los foros de MSDN, esto es un problema conocido. ¿Alguien ha encontrado buenas soluciones o alguien tiene sugerencias para alternativas?

+4

No es la respuesta, pero como una cuestión de estilo no es necesario decir 'Attribute' cuando se utiliza un atributo. '[DataMember]' es todo lo que necesita. –

Respuesta

0

Tuve el mismo problema al exponer objetos Entity a través de un servicio WCF y utilicé la solución que enlazaba con here, que es agregar el siguiente atributo a las propiedades para forzarlos a ser serializados.

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

no he encontrado ningún maneras más agradables '' de conseguir este trabajo.

Por ejemplo, dada una entidad llamada Maestro con los campos Título, nombre y apellido le puede añadir una clase parcial de algo Maestro como:

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

A continuación, siempre y cuando sus servicio WCF referencias de interfaz esta clase entonces el las propiedades adicionales se serializan y están disponibles para los consumidores del servicio.

p. Ej.

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

hm, aunque parece que no funciona. ¿A qué entidades te estás adaptando? – friism

+0

He agregado un ejemplo más detallado a la respuesta anterior. – Nelson

+0

Creo que esto requiere que EF4 funcione. @Nelson: ¿puede confirmar que tiene .NET Framework 4.0? – Antony

Cuestiones relacionadas