2010-10-19 13 views
5

Ho creato un modello di entità utilizzando Entity Framework 4, che ho esposto tramite un servizio dati WCF. Una delle mie entità deve avere proprietà definite che non sono permanenti nel database, ma il progettista di Entity Model non ti consente di farlo.Come esporre le proprietà non persistenti utilizzando un servizio dati WCF?

Per risolvere questo ho definito tutti gli oggetti come oggetti POCO, che consente di aggiungere proprietà non persistenti agli oggetti, ma non al modello.

Il problema è che, poiché queste proprietà non persistenti esistono solo negli oggetti stessi e non nel modello, non vengono esposte tramite il servizio dati WCF.

Esiste un modo per definire le proprietà in un modello di entità che non sono persistenti nel database?

Grazie in anticipo per eventuali risposte

Ryan

risposta

0

bene le classi per il modello sono parziali. Puoi scrivere le tue proprietà non persistenti nelle altre parti delle classi. Annoti se funziona perché non sto usando WCF Data Services, ma ogni volta che ho bisogno di una proprietà in oggetti business che non sono mappati al campo nel DB, faccio così.

+0

Sfortunatamente, questo è già quello che ho provato a fare. Tuttavia, le proprietà non vengono visualizzate in Reference.cs quando si crea un riferimento al servizio dati WCF. –

0

Penso che ikirachen sia sulla strada giusta con l'utilizzo di una classe parziale per definire proprietà aggiuntive. Affinché WCF li esporti, è necessario contrassegnare anche le proprietà con l'attributo DataMember. Ho creato un piccolo servizio WCF per testare questo:

[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; } 
} 

Ed ecco il codice del client, che mostra le AssociatedLeadIds esposte tramite 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(); 
    } 
} 

Speriamo che questo aiuta!

+0

Spremi il codice un po 'di più. Fammi sapere se non sei ancora in grado di esporre le proprietà tramite WCF. – jlaneaz

+0

Grazie per il tuo contributo jlaneaz, sfortunatamente questo non funziona ancora per me usando un servizio dati WCF. Penso di sapere qual è il problema però. Il riferimento al servizio per un servizio dati Wcf sembra essere generato dal file EDMX piuttosto che dal codice base, quindi solo le proprietà esistenti nel file EDMX vengono serializzate nel riferimento del servizio. –

Problemi correlati