Написание ORM с использованием Reflection не может быть правильно приведено - PullRequest
1 голос
/ 18 января 2012

Итак, я пишу, строго для личного изучения, ORM на C #. Я перебираю базу данных, где имена столбцов соответствуют свойствам класса. Затем я перебираю свойства класса и присваиваю соответствующие значения столбца базы данных, но сталкиваюсь с проблемами приведения возвращаемого значения из столбца базы данных.

var PropCollection = type.GetProperties();
foreach (PropertyInfo Property in PropCollection)
{
    Property.SetValue(_t, DReader[Property.Name].ToString(),null);
}

Я получаю ожидаемую ошибку:

Объект типа 'System.String' не может быть преобразован в тип 'System.Int32'.

Если DReader - это просто SQLDataReader, возвращающий значение столбца внутри цикла, скажем, это значение типа int, как я могу привести его как таковой?

Property.GetType();

правильно знает тип, который мне нужен, но как мне использовать его для приведения DReader[Property.Name]?

1 Ответ

5 голосов
/ 18 января 2012

Convert.ChangeType может обрабатывать все прямые преобразования.

Вы не должны использовать DReader[Property.Name].ToString() в цикле. Удалить ToString().

var PropCollection = type.GetProperties();
foreach (PropertyInfo Property in PropCollection)
{
    var value = DReader[Property.Name];
    if (!Property.GetType().IsAssignableFrom(value.GetType())
        value = Convert.ChangeType(value, Property.GetType());

    Property.SetValue(_t, value, null);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...