我正在尝试建立一个通用的SQL执行器。
如果我的DTO类属性与我的SQL表列具有相同的名称,则它正在工作。
为了增加我的代码的通用部分,我向DTO添加了一个属性,以便将我的DTO属性分离到SQL列。
但它不起作用
我的DTO课程:
public class CarModels
{
[DbColumn("ca_id")] //column name
public string Id { get; set; }
[DbColumn("ca_label")] //column name
public string Label { get; set; }
}
我的通用方法:
public List<T> ExecuteSQLSELECTCommand<T>(string SQLcommand) where T : new()
{
IDictionary<string, string> databaseMappings = new Dictionary<string, string>(); ;
Get_Connection();
using (MySqlCommand cmd = new MySqlCommand())
{
cmd.Connection = connection;
cmd.CommandText = string.Format(SQLcommand);
List<T> res = new List<T>();
try
{
MySqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
T t = new T();
for (int inc = 0; inc < reader.FieldCount; inc++)
{
Type type = t.GetType();
//how to get attribute link to current FiedCount ?
PropertyInfo prop = type.GetProperty(reader.GetName(inc));
prop.SetValue(t, reader.GetValue(inc), null);
}
res.Add(t);
}
reader.Close();
}
catch (Exception e)
{
}
return res;
}
}
和我的电话:
List<CarModels> carTest = db.ExecuteSQLCommand<CarModels>("SELECT ca_id, ca_label from cartracker.ca_cars");
我的问题是,我如何恢复属性的值以便在MySqlDataReader上下文中构建PropertyInfo?
感谢。
答案 0 :(得分:0)
你可以使用这样的类。你能告诉我它是否有帮助:
public class AnEntity<T> where T : class, new()
{
public T AnEntity(string[] token, ref int i, out TokenEnum tokenEnum,
out string tokenException)
{
...
PropertyInfo[] properties = typeof(T).GetProperties();
try
{
foreach (PropertyInfo property in properties)
{
...
if (property.Name == "AName")
{
break;
}
...