Здравствуйте, Павел Бондарчук, Вы писали:
ПБ>Как вам такая идея?
Добавь в конец MapData.cs следующие методы:
public static IList MapList(IDataReader reader, IList list, Type type)
{
if (reader.Read())
{
Mapping.DataReaderSource drs = new Mapping.DataReaderSource(reader);
Mapping.TypeDescriptor td = Mapping.TypeDescriptor.GetDescriptor(type);
do
{
object o = td.CreateInstance();
MapData.Map(drs, reader, td, o);
list.Add(o);
} while (reader.Read());
}
return list;
}
public static ArrayList MapList(IDataReader reader, Type type)
{
ArrayList arrayList = new ArrayList();
MapList(reader, arrayList, type);
return arrayList;
}
Использовать можно будет так:
using System;
using System.Data;
using System.Collections;
using Rsdn.Framework.Data;
using Rsdn.Framework.Data.DataProvider;
namespace Example
{
public class Category
{
[MapField(Name = "CategoryID")]
public int ID;
public string CategoryName;
[MapField(IsNullable = true)]
public string Description;
}
class Test
{
static void Main()
{
using (DbManager db = new DbManager())
using (IDataReader dr = db.ExecuteReader(@"
SELECT
CategoryID,
CategoryName,
Description
FROM Categories
SELECT
CategoryID,
CategoryName
FROM Categories"))
{
ArrayList al = MapData.MapList(dr, typeof(Category));
foreach (Category c in al)
Console.WriteLine("{0,2} {1,-15} {2}", c.ID, c.CategoryName, c.Description);
if (dr.NextResult())
{
al = MapData.MapList(dr, typeof(Category));
foreach (Category c in al)
Console.WriteLine("{0,2} {1,-15} {2}", c.ID, c.CategoryName, c.Description);
}
}
}
}
}
Я это попозже выложу в новой версии.
... << RSDN@Home 1.1 beta 2 >>