2010-10-19 7 views
5

J'ai créé un modèle d'entité à l'aide d'Entity Framework 4, que j'ai exposé via un service de données WCF. Une de mes entités doit avoir des propriétés définies qui ne sont pas conservées dans la base de données, mais le concepteur Entity Model ne vous autorise pas à le faire. Pour contourner cela, j'ai défini tous mes objets en tant qu'objets POCO, ce qui vous permet d'ajouter des propriétés non persistantes à vos objets, mais pas à votre modèle. Le problème que j'ai, c'est que, parce que ces propriétés non persistantes existent uniquement dans les objets eux-mêmes et non le modèle, ils ne sont pas exposés via le service de données WCF.Comment exposer des propriétés non persistantes à l'aide d'un service de données WCF?

Existe-t-il un moyen de définir des propriétés dans un modèle d'entité qui ne sont pas conservées dans la base de données?

Merci à l'avance pour les réponses

Ryan

Répondre

0

Eh bien, les catégories du modèle sont partielles. Vous pouvez écrire vos propriétés non persistantes dans les autres parties des classes. S'il vous plaît notez si cela fonctionne parce que je n'utilise pas les services de données WCF, mais chaque fois que j'ai besoin d'une propriété dans les objets métier qui n'est pas mappée sur le champ dans la base de données, je le fais.

+0

Malheureusement, c'est déjà ce que j'ai essayé de faire. Les propriétés n'apparaissent pas dans Reference.cs lorsque vous créez une référence de service au service de données WCF. –

0

Je pense qu'ikirachen est sur la bonne voie en utilisant une classe partielle pour définir des propriétés supplémentaires. Pour que WCF les expose, vous devez également marquer les propriétés avec l'attribut DataMember. J'ai créé un petit service WCF pour tester ceci:

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

Et voici le code client, montrant les AssociatedLeadIds exposés par 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(); 
    } 
} 

Espérons que cela aide!

+0

Enchaîné le code un peu plus. Faites-moi savoir si vous êtes toujours incapable d'exposer les propriétés via WCF. – jlaneaz

+0

Merci pour votre contribution jlaneaz, malheureusement cela ne fonctionne toujours pas pour moi en utilisant un service de données WCF. Je pense que je sais quel est le problème. La référence de service pour un service de données Wcf semble être créée à partir du fichier EDMX plutôt que de la base de code, de sorte que seules les propriétés qui existent dans le fichier EDMX sont sérialisées dans la référence de service. –

Questions connexes