En utilisant les énumérations dans les Services de Données WCF
Je suis en train de créer manuellement un Service de Données WCF à l'aide d'un POCO modèle de données et je ne peux pas comprendre comment bien exposer enum
valeurs. En supposant un modèle simple comme:
public class Order
{
public int ID {get; set;}
public string Description {get; set;}
public OrderStatus Status {get; set;}
}
public enum OrderStatus
{
New,
InProcess,
Complete
}
Comment fais tu pour exposer les informations utiles dans l' OrderStatus
propriété via le OData Service de Données WCF?
Si vous ne faites rien, le Service de Données génère une erreur d'exécution (enum est de propriété non valide). La seule réponse que j'ai vu qu'au moins résout l'erreur est de marquer le enum
propriété Ignorés, tels que:
[System.Data.Services.IgnoreProperties("Status")]
public class Order ...
Cela fonctionne, mais il vous oblige à "omettre" de précieuses informations à partir de la couche de service.
Il existe d'autres options pour travailler avec les valeurs de l'enum dans les Services de Données WCF?
EDIT: Veuillez noter que c'est des Services de Données WCF (aka Astoria). Ce n'est pas crue des Services WCF, auquel cas les réponses sont de plus en plus clair.
- Il est recommandé d'éviter les énumérations dans webservices, car ils créent de subtils compatible problèmes. Voir stackoverflow.com/a/788281/52277
Vous devez vous connecter pour publier un commentaire.
Les énumérations sont actuellement pas pris en charge dans les Services de Données WCF (le protocole OData ne les supporte pas non plus).
Le typique solution de contournement consiste à utiliser des chaînes de caractères et les valeurs des constantes, ou entier et les valeurs des constantes.
[EnumMemberAttribute]
ainsi que l'enum doit être décorés avec de la " [DataContractAttribute]`Peut-être qu'on peut "tricher" avec la solution de contournement ci-dessous:
À titre de suivi, le "wrapper" est en fin de compte ce qui a fonctionné. Essentiellement, une petite classe est écrite pour envelopper le
enum
et retour primitiveint
valeurs dans le Service de Données:C'était en grande partie basée sur les conseils donnés pour travailler autour de EF4 de
enum
limites:http://blogs.msdn.com/b/alexj/archive/2009/06/05/tip-23-how-to-fake-enums-in-ef-4.aspx
Espère que cette technique aide les autres qui suivent.
En supposant DataContract la Sérialisation, comme suit:
Vous avez besoin de faire l'énumération d'un Contrat de Données.
Voir ici pour un exemple: http://consultingblogs.emc.com/merrickchaffer/archive/2007/04/03/Passing-Enum-values-into-WCF-Service-operations.aspx
[Edit] Apparemment, ce n'est pas toujours le cas comme on le voit ici:
Partage Enum avec Service WCF
Vous avez besoin d'écrire propre QueryPrivider