2009-07-06 6 views
1

Si vous ne souhaitez pas exposer l'ID d'un objet de domaine au client d'un service WCF, vous ne devez évidemment pas mettre une propriété d'ID dans le DataContract, n'est-ce pas? Mais alors, lorsque le client appelle la méthode save sur votre service, comment savez-vous qu'il s'agit d'un nouvel objet, ou d'un existant qui a été modifié? Avec NHibernate, vous pouvez utiliser SaveOrUpdate et vérifier l'ID et la valeur non enregistrée, mais lorsque vous recevez le DataContract sans l'ID, vous n'avez aucun moyen de savoir s'il s'agit d'un nouvel enregistrement à enregistrer dans la base de données, ou un enregistrement existant à mettre à jour.Comment savoir si un DataContrat WCF représente une entité persistante ou transitoire?

Comment voulez-vous résoudre ce problème?

Répondre

1

Je ne suis pas d'accord avec votre logique: l'entité que vous exposez au client doit avoir son identifiant unique - c'est votre seul moyen «sûr» d'identifier et de trouver votre entité de manière unique. L'application client ne doit absolument pas afficher l'ID unique interne au système, mais elle doit voyager entre le service et le client, afin que le service sache quel objet doit être utilisé lorsqu'une requête de mise à jour ou de suppression est renvoyée. le client.

Marc

1

Un contrat de données représente ce que vous voulez qu'il représente.

Si vous ne souhaitez pas afficher l'ID réel, vous pouvez exposer une autre clé, puis rechercher l'entité réelle à l'aide de cette autre clé. Par exemple, vous pouvez exposer un ID de type Guid et gérer votre propre dictionnaire ou table de correspondance en faisant correspondre Guid à l'ID réel. Bien sûr, cela introduit maintenant un état que vous devrez maintenir.

Questions connexes