2010-09-15 6 views
1

J'ai mappé la table de la base de données sql à linq dans le fichier dbml Employee.La commande de membre de données est manquante dans la classe générée par le proxy client wcf.

[global::System.Runtime.Serialization.DataContractAttribute()] 
public partial class tbEmployee 
{ 

    private int _Employeeid; 

    private string _EmployeeName; 



    public tbEmployee() 
    { 
    } 

    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_Employeeid", DbType = "Int NOT NULL")] 
    [global::System.Runtime.Serialization.DataMemberAttribute(Order = 0)] 
    public int EmployeeID 
    { 
     get 
     { 
      return this._PeriodContextRefId; 
     } 
     set 
     { 
      if ((this._Employeeid != value)) 
      { 
       this._Employeeid = value; 
      } 
     } 
    } 

    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_EmployeeName", DbType = "NVarChar(2) NOT NULL", CanBeNull = false)] 
    [global::System.Runtime.Serialization.DataMemberAttribute(Order = 1)] 
    public string EmployeeName 
    { 
     get 
     { 
      return this._EmployeeName; 
     } 
     set 
     { 
      if ((this._EmployeeName != value)) 
      { 
       this._EmployeeName = value; 
      } 
     } 
    } 

} 

et service que je viens de rentrer l'objet de type

List<tbEmployee> 

quand j'ajouter la référence de service dans mon client les informations de commande de membre de la date saute. Comme j'utilise le protobuf-net pour la sérialisation/désérialisation, cela donne le problème tout en désérialisant du côté de mon client.

Répondre

0

Oui, c'est une nuisance. Il y a 2 options pour régler ceci; le premier (et le plus simple) consiste à utiliser la capacité de WCF à partager un assemblage de contrat entre le client et le serveur. Si vous pouvez partager la couche DTO, cela va garder les choses simples.

La seconde consiste à ajouter des marqueurs supplémentaires au client pour lui donner un indice. Vous pouvez le faire via une classe partial, par exemple dans un fichier séparé de code (ne pas modifier le fichier généré):

namespace YourNamespace { 
    [ProtoContract(DataMemberOffset = 1)] /* shift all DataMember orders */ 
    public partial class tbEmployee {} 
} 

une alternative plus explicite:

namespace YourNamespace { 
    [ProtoPartialMember(1, "EmployeeID")] 
    [ProtoPartialMember(2, "EmployeeName")] 
    public partial class tbEmployee {} 
} 
+0

Merci marc pour la réponse. En fait, j'ai beaucoup d'objets comme ça. Fondamentalement, je suis en série, puis en le compressant dans le tableau d'octets, puis en envoyant du côté client Silverlight. comme vous l'avez suggéré la première option signifie que vous voulez que je partage la classe de concepteur dbml du côté client (objet de transfert DTO) si vous pouvez s'il vous plaît me donner quelques exemples car je ne suis pas au courant de cette technique. –

+0

Ah, si vous avez des plates-formes différentes sur le client/serveur (Silverlight), le partage de l'assembly peut ne pas être une option. Mais partager le fichier * class * probablement * est * une option ...? alors votre WCF expose juste l'API byte [] et il n'y a pas de classe code-gen? Cependant, ce n'est pas une bonne option si le code du serveur est également généré, par exemple par LINQ-to-SQL –