2010-10-19 10 views
5

He creado un modelo de entidad utilizando Entity Framework 4, que expuse a través de un Servicio de Datos WCF. Una de mis entidades necesita tener propiedades definidas que no se conservan en la base de datos, pero el diseñador del Modelo de Entidades no le permite hacer esto.¿Cómo expongo las propiedades no persistentes usando un servicio de datos WCF?

Para evitar esto, he definido todos mis objetos como objetos POCO, lo que le permite agregar propiedades no persistentes a sus objetos, pero no a su modelo.

El problema que tengo es que, debido a que estas propiedades no persistentes solo existen en los objetos mismos y no en el modelo, no se exponen a través del Servicio de datos WCF.

¿Hay alguna forma de definir propiedades en un modelo de entidad que no se conservan en la base de datos?

Gracias de antemano por cualquier respuesta

Ryan

Respuesta

0

Well las clases para el modelo son parciales. Puede escribir sus propiedades no persistentes en las otras partes de las clases. Anote si esto funciona porque no estoy usando WCF Data Services, pero cada vez que necesito una propiedad en objetos comerciales que no esté asignada al campo en el DB, lo hago de esa manera.

+0

Lamentablemente, esto ya es lo que he tratado de hacer. Las propiedades no aparecen en Reference.cs embargo, cuando crea una referencia de servicio al servicio de datos WCF. –

0

Creo que ikirachen está en el camino correcto con el uso de una clase parcial para definir propiedades adicionales. Para que WCF los exponga, también debe marcar las propiedades con el atributo DataMember. He creado un pequeño servicio WCF para probar esto:

[ServiceContract] 
public interface IService1 
{ 
    [OperationContract] 
    string DoStuff(User user); 
} 

public class Service1 : IService1 
{ 
    public string DoStuff(User user) 
    { 
     string result = string.Empty; 
     foreach (Guid leadId in user.AssociatedLeadIds) 
     { 
      // This is going to console on client, 
      // just making sure we can read the data sent to us 
      result += leadId.ToString() + "\n"; 
     } 

     return result; 
    } 
} 

// partial entity model class 
public partial class User 
{ 
    // This is not persisted to our DB with the user model 
    [DataMember] 
    public ICollection<Guid> AssociatedLeadIds { get; set; } 
} 

y aquí está el código de cliente, mostrando los AssociatedLeadIds expuestas a través de WCF:

class Program 
{ 
    static void Main(string[] args) 
    { 
     User u = new User 
     { 
      // Here we set our non-persisted property data 
      AssociatedLeadIds = new Guid[] 
      { 
       Guid.NewGuid(), 
       Guid.NewGuid(), 
       Guid.NewGuid() 
      }, 
      // The rest are persisted properties 
      ApplicationId = Guid.NewGuid(), 
      UserName = "TestUser", 
      LoweredUserName = "testuser", 
      LastActivityDate = DateTime.Now, 
      IsAnonymous = false 
     }; 

     using (Service1Client svc = new Service1Client()) 
     { 
      // Here we call the service operation 
      // and print the response to the console 
      Console.WriteLine(svc.DoStuff(u)); 
     } 

     Console.ReadKey(); 
    } 
} 

Esperemos que esto ayuda!

+0

Rellenó el código un poco más. Avíseme si aún no puede exponer las propiedades a través de WCF. – jlaneaz

+0

Gracias por su entrada jlaneaz, desafortunadamente esto todavía no funciona para mí usando un servicio de datos WCF. Creo que sé cuál es el problema. La referencia de servicio para un servicio de datos Wcf parece estar construida a partir del archivo EDMX en lugar de la base del código, por lo que solo las propiedades que existen en el archivo EDMX se serializan en la referencia del servicio. –

Cuestiones relacionadas