从数据库查询填充 class 对象的更好方法?
A better way to populate a class object from a database query?
目前我正在使用 SqlCommands 来 运行 存储过程,我将 ExecuteReader 和 运行 读一段时间,将每个字段分配给一个对象,然后将该对象添加到列表中。到目前为止,当存储过程 return 几个字段时,这工作正常,但现在我需要 return 20 多个字段的完整数据库行。有更好的方法吗?
这是我当前如何使用 SqlCommand 对象并填充 class.
的示例
private IEnumerable<DigitalQueue> GetUncheckedQueues()
{
var cmd = new SqlCommand
{
CommandTimeout = 30,
CommandText = "sp_StoredProcedureName",
Connection = Main.Con,
CommandType = CommandType.StoredProcedure
};
var sdrQueues = cmd.ExecuteReader();
var uncheckedQueues = new List<DigitalQueue>();
while (sdrQueues.Read())
{
var workingQueue = new DigitalQueue
{
queueId = sdrQueues.GetValue(0).ToString(),
queueStatus = sdrQueues.GetValue(1).ToString()
};
if (!sdrQueues.IsDBNull(2))
{
workingQueue.queueDate = sdrQueues.GetDateTime(2);
}
uncheckedQueues.Add(workingQueue);
}
return uncheckedQueues;
}
开始使用 Dapper
,它是最好的 micro-orm 类型,可以帮助您以最有效的方式将查询映射到对象。
Getting Started with Dapper
Dapper Tutorials
示例代码
var uncheckedQueues = connection.Query<DigitalQueue>("sp_StoredProcedureName", commandType: CommandType.StoredProcedure).ToList();
目前我正在使用 SqlCommands 来 运行 存储过程,我将 ExecuteReader 和 运行 读一段时间,将每个字段分配给一个对象,然后将该对象添加到列表中。到目前为止,当存储过程 return 几个字段时,这工作正常,但现在我需要 return 20 多个字段的完整数据库行。有更好的方法吗?
这是我当前如何使用 SqlCommand 对象并填充 class.
的示例private IEnumerable<DigitalQueue> GetUncheckedQueues()
{
var cmd = new SqlCommand
{
CommandTimeout = 30,
CommandText = "sp_StoredProcedureName",
Connection = Main.Con,
CommandType = CommandType.StoredProcedure
};
var sdrQueues = cmd.ExecuteReader();
var uncheckedQueues = new List<DigitalQueue>();
while (sdrQueues.Read())
{
var workingQueue = new DigitalQueue
{
queueId = sdrQueues.GetValue(0).ToString(),
queueStatus = sdrQueues.GetValue(1).ToString()
};
if (!sdrQueues.IsDBNull(2))
{
workingQueue.queueDate = sdrQueues.GetDateTime(2);
}
uncheckedQueues.Add(workingQueue);
}
return uncheckedQueues;
}
开始使用 Dapper
,它是最好的 micro-orm 类型,可以帮助您以最有效的方式将查询映射到对象。
Getting Started with Dapper Dapper Tutorials
示例代码
var uncheckedQueues = connection.Query<DigitalQueue>("sp_StoredProcedureName", commandType: CommandType.StoredProcedure).ToList();