首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

快速構建個人 ORM 框架系列(三):FastObject 核心實現——DataReader 到實體的自動映射

     編輯:關於ASP.NET

核心問題:如何將 DbDataReader 逐欄位映射到未知型別 T 的屬性?答案是反射。

關鍵映射邏輯

for (int i = 0; i < reader.FieldCount; i++)
{
    PropertyInfo p = obj.GetType().GetProperty(reader.GetName(i));
    if (reader.GetValue(i) != DBNull.Value)
        p.SetValue(obj, reader.GetValue(i), null);
}

完整 ReaderHelper

class ReaderHelper
{
    public static object ReaderToObject(DbDataReader reader, object obj)
    {
        Type t = obj.GetType();
        if (t.Equals(typeof(CommonObject))) // 特殊型別處理
        {
            for (int i = 0; i < reader.FieldCount; i++)
            {
                PropertyInfo p = obj.GetType().GetProperty("Co" + (i+1));
                if (reader.GetValue(i) != DBNull.Value)
                    p.SetValue(obj, reader.GetValue(i), null);
            }
        }
        else
        {
            for (int i = 0; i < reader.FieldCount; i++)
            {
                PropertyInfo p = obj.GetType().GetProperty(reader.GetName(i));
                if (reader.GetValue(i) != DBNull.Value)
                    p.SetValue(obj, reader.GetValue(i), null);
            }
        }
        return obj;
    }
}

已知限制:屬性名需與資料庫欄位名完全一致(大小寫敏感),不支援巢狀物件、別名映射,後續需引入 Attribute 或 Convention 改進。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved