1
也許這個問題,總是在這個論壇上問,但我沒有找到我需要的。 我的問題是我有這樣使用反射和ValueInjecter映射覆合對象
class Customer
{
private int Id { set; get; }
private int Name { set; get; }
private Company Company { set; get; }
...
}
class Company
{
private int Id { set; get; }
private string Name { set; get; }
...
}
複合類當我的客戶數據
string sql = "SELECT cust.id, cust.name, comp.name AS [CompanyName] FROM Customer cust INNER JOIN Company comp ON cust.Company = comp.Id";
....
using (IDataReader dr = db.ExecuteReader(cmd))
{
if (dr.Read())
{
customer = (Customer)FillDataRecord(dr, customer);
}
}
,並使用反射它映射到客戶類(對象),代碼:
public static Object FillDataRecord(IDataRecord dr, Object obj)
{
try
{
Type type = obj.GetType();
PropertyInfo[] properties = type.GetProperties();
for (int i = 0; i < dr.FieldCount; i++)
{
if (!dr[i].ToString().Equals(string.Empty))
{
type.GetProperty(dr.GetName(i)).SetValue(obj, dr[i], null);
}
}
return obj;
}
catch (Exception ex)
{
throw ex;
}
}
當它映射公司名稱時,它將返回錯誤「未將對象引用設置爲對象的實例」。我已經調試過,並且知道這個問題,但直到現在,我無法解決它。
我知道AutoMapper或Dapper,但是當我適用於這種情況時,我也遇到了同樣的問題。
現在我正在使用ValueInjecter,從我讀過的它可以解決我的問題。 但我有cust.Id值相同與cust.Company.Id和cust.Name = 「」 和cust.Company.Name = 「」
string sql = "select cust.id, cust.name, comp.name from customer cust inner join company comp on cust.company = comp.id";
while (dr.Read())
{
var cust = new Customer();
cust.InjectFrom<ReaderInjection>(dr);
cust.Company = new Company();
cust.Company.InjectFrom<ReaderInjection>(dr);
list.add(cust);
}
這有什麼錯?請幫幫我。
我對Generic知之甚少,在完成之後我會改進它。感謝您的改善,但我有錯誤,因爲變量我沒有在你的代碼中聲明,並且是字段名類型的字符串? – Willy
我很抱歉,是的,fieldName是一個字符串。 – chemicalNova
沒關係,但是我在record.GetName(i),record.GetValue(i)和記錄[i]呢?你還沒有定義它 – Willy