c# - 使用反射编写 ORM 无法正确转换

标签 c# reflection orm

所以我正在编写 C# 中的 ORM,严格来说是为了个人学习。我正在遍历一个数据库,其中的列名与类的属性相匹配。然后我遍历类的属性并分配相应的数据库列值,但我遇到了从数据库列中转换返回值的问题。

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

我得到了预期的错误:

Object of type 'System.String' cannot be converted to type 'System.Int32'.

DReader 只是一个 SQLDataReader,它在循环内返回一个列值,比如说这个值是一个 int,我该如何转换它??

Property.GetType();

正确知道我需要的类型,但我如何使用它来转换 DReader[Property.Name]

最佳答案

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);
}

关于c# - 使用反射编写 ORM 无法正确转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8906278/

相关文章:

c# - 手动打包字节以在网络上发送

c# - out 参数 - 为什么它不起作用

c# - GetProperty 反射在新属性上产生 "Ambiguous match found"

php - 获取调用函数参数

hibernate - 将 ORM 与严格的 MVC 框架结合使用

javascript - 无法使用 Sequelize 在架构 (postgresql) 中关联模型

c# - 为双边移动统一镜像 Oculus Rift Controller 位置

c# - 让方法在 c# 中采用任何数据类型

java - 我可以以字符串类型的变量为条件吗?

java - 避免通过 JPA 将 'null' 值插入数据库表