2009-06-04 6 views
0

J'ai une table comme ceci:Comment sérialiser des données personnalisées à partir de la base de données?

ID Name  Key  Value 
1 Mydata1  Mail  myval1 
1 Mydata1  Name  myval2 
1 Mydata1  Nick  myval3 
1 Yourdata key2  myval4 

et une classe comme ceci:

[Serializable] 
public class Mydata 
{ 
    public string Mail{get;set;} 
    public string Name{get;set;} 
    public string Nick{get;set;} 
} 

J'extrait de mon tableau de données où Name = 'mydata1' dans une liste.

Comment sérialiser ces données dans ma classe. Merci!

+0

Quand vous dites sérialiser, voulez-vous dire comment interroger votre base de données pour remplir votre objet Mydata? – Kane

+0

demandez-vous "comment puis-je transposer une table SQL?" –

Répondre

1

Vous devriez vous intéresser à LINQ to SQL, LINQ to Entities, NHibernate, etc. Il s'agit de OR Mappers, ou Object/Relational Mappers. Ils sont conçus pour interroger votre base de données pour vous et renvoyer des objets sérialisés à partir de votre domaine. Ils peuvent réduire considérablement les efforts nécessaires pour créer une application avec des objets persistants et récupérés depuis un serveur de base de données.

Notez que Linq to SQL requis SQL Server, tandis que les deux autres peuvent être utilisés avec n'importe quelle base de données.

+0

Je ne pense pas qu'aucun d'entre eux fera * directement * la traduction requise ici ... –

0

Si vous avez déjà votre classe, vous recherchez le support "POCO" dans un ORM.

E.g. Entities Framework v4 fait cela. Voir here for details. Je comprends que nHibernate a ce soutien aujourd'hui.

Alternativement dans votre couche d'accès aux données, vous pouvez faire la conversion dans votre couche d'accès aux données (DTO de == Data Transfer Object) en utilisant un lecteur de données:

var rs = dbCmd.ExecuteReader(); 
var results = new List<MyDto>(); 
while (rs.Read()) { 
    results.Add(new MyDto { 
    Id = rs.ReadInt("Id"), 
    Name = rs.ReadString("Name"), 
    ... 
    }; 
} 

LINQ to SQL:

using (var dc = MyDataContext()) { 
    var results = from d in dc.MyDataType 
       select new MyDto { 
        Id = d.Id, 
        Name = d.Name, 
        ... 
       }; 
} 

Cependant, j'ai tendance à ajouter une méthode pour personnaliser l'entité générée avec une méthode d'assistance pour effectuer le mappage (ce qui évite de répéter le code de copie de propriété pour chaque requête).

Questions connexes