Ya, saya menghabiskan sepanjang malam dan akhirnya menemukan metode statis tentang cara mengisi data dari DataReader ke dalam kumpulan entitas data umum melalui refleksi.
//Kchen.Core.BaseBusinessObject adalah kelas entitas data umum, di sini hanya membatasi tipe yang diwarisi oleh T
IList statis publik<T> FillDataListGeneric<T>(pembaca System.Data.IDataReader) di mana T : Kchen.Core.BaseBusinessObject
{
//Membuat instance koleksi generik Daftar<>
IList<T> DataList = Daftar baru<T>();
sementara (pembaca.Baca())
{
//Karena tipenya tidak diketahui, objek entitas data harus dibuat secara dinamis berdasarkan tipe T melalui metode Activator.CreateInstance<T>().
T RowInstance = Aktivator.CreateInstance<T>();
//Dapatkan semua properti objek melalui refleksi
foreach (PropertyInfo Properti dalam typeof(T).GetProperties())
{
//BindingFieldAttribute adalah Atribut khusus yang digunakan untuk mengikat kolom database
foreach (BindingFieldAttribute FieldAttr di Property.GetCustomAttributes(typeof(BindingFieldAttribute), true))
{
mencoba
{
//Dapatkan urutan field database saat ini
int Ordinal = pembaca.GetOrdinal(FieldAttr.FieldName);
if (pembaca.GetValue(Ordinal) != DBNull.Value)
{
//Isi data yang dibaca oleh DataReader ke dalam properti entitas objek
Property.SetValue(RowInstance, Convert.ChangeType(reader.GetValue(Ordinal), Property.PropertyType), null);
}
}
menangkap
{
merusak;
}
}
}
//Tambahkan objek entitas data ke koleksi generik
DataList.Tambahkan(RowInstance);
}
kembalikan Daftar Data;
}
Gunakan kode berikut saat memanggil
//Pseudocode OleDbDataReader _ds = Buat OleDbDataReader
IList<Product> _result = Kchen.Utilities.FillDataListGeneric<Product>(_ds);
Metode statis ini dengan cepat mengisi data ke dalam kumpulan generik entitas data melalui tipe entitas dan