Eh bien, j'ai passé une nuit entière et j'ai finalement trouvé une méthode statique pour remplir les données de DataReader dans une collection générique d'entités de données par réflexion.
//Kchen.Core.BaseBusinessObject est une classe d'entité de données générale, ici elle limite uniquement le type hérité par T
public static IList
{
//Instancier une collection générique List<>
IList
tandis que (lecteur.Read())
{
// Puisqu'il s'agit d'un type inconnu, l'objet d'entité de données doit être créé dynamiquement en fonction du type de T via la méthode Activator.CreateInstance
T RowInstance = Activator.CreateInstance
//Obtenir toutes les propriétés de l'objet par réflexion
foreach (propriété PropertyInfo dans typeof(T).GetProperties())
{
//BindingFieldAttribute est un attribut personnalisé utilisé pour se lier aux champs de base de données
foreach (BindingFieldAttribute FieldAttr dans Property.GetCustomAttributes(typeof(BindingFieldAttribute), true))
{
essayer
{
//Obtenir l'ordre des champs de la base de données actuelle
int Ordinal = reader.GetOrdinal(FieldAttr.FieldName);
si (reader.GetValue(Ordinal) != DBNull.Value)
{
//Remplissez les données lues par DataReader dans les propriétés de l'entité objet
Property.SetValue(RowInstance, Convert.ChangeType(reader.GetValue(Ordinal), Property.PropertyType), null);
}
}
attraper
{
casser;
}
}
}
//Ajouter l'objet entité de données à la collection générique
DataList.Add(RowInstance);
}
renvoyer DataList ;
}
Utilisez le code suivant lors de l'appel de
//Pseudocode OleDbDataReader _ds = Create an OleDbDataReader
IList
Cette méthode statique remplit rapidement les données dans la collection générique d'entités de données via un type d'entité et DateReader
.