我有一个存储过程,它的功能类似于:
SELECT a.TaskId, b.CompanyCode FROM task a JOIN company b ON b.CompanyId = a.CompanyId;我有一个名为TaskItem的对象,它具有TaskId和CompanyCode属性,但是当我执行以下命令时(我假设它可以工作):
var masterDatabase = new Database("MasterConnectionString");
var s = PetaPoco.Sql.Builder.Append("EXEC spGetTasks @@numberOfTasks = @0", numberOfTasks);
var tasks = masterDatabase.Query<TaskItem>(s);问题是CompanyCode列不存在于任务表中,我进行了跟踪,似乎PetaPoco正在尝试从任务表中选择所有属性,并使用存储过程进行填充。
以下是TaskItem的定义:
public class TaskItem {
public int TaskItemId { get; set; }
public int CompanyId { get; set; }
public string CompanyCode { get; set; }
public int Status { get; set; }
}如何使用PetaPoco简单地用存储过程的结果填充任务对象列表?
发布于 2013-06-25 07:18:38
如果您只需要数据库中的两列,请不要使用POCOs。使用动态:
var d = masterDatabase.Query<dynamic>("Exec spGetTasks @@numberOfTasks = @0", numberOfTasks);
var result = d.Select(item => new Tuple<int, string>(item.TaskId, item.CompanyCode)).ToList();否则,您用来查询数据库的POCO,即TaskItem,对于查询返回的每个列名都需要有一个公共属性。
更新现在您已经发布了TaskItem的定义,我看到您已经拥有了所需的所有属性。从理论上讲,拥有一个与返回列名称完全相同的公共属性就足以填充它。因此,在您的示例中,由于查询返回列CompanyCode,因此应该在TaskItem上填充适当的属性。如果属性名称不同,则可以通过使用[Column]属性对其进行修饰来对其进行映射
[Column("NameOfTheColumn")]
public string CompanyCode { get; set; }如果由于某种原因,CompanyCode仍然没有填充,则问题出在查询上。确保它返回适当的结果。
https://stackoverflow.com/questions/17285914
复制相似问题