Stored procedures PetaPoco可以使用带有join子句的存储过程填充对象吗?

Stored procedures PetaPoco可以使用带有join子句的存储过程填充对象吗?,stored-procedures,orm,petapoco,Stored Procedures,Orm,Petapoco,我有一个存储过程,它执行类似于: SELECT a.TaskId, b.CompanyCode FROM task a JOIN company b ON b.CompanyId = a.CompanyId; 我有一个名为TaskItem的对象,该对象具有TaskId和CompanyCode属性,但当我执行以下操作时(我假设该操作有效): 如何使用PetaPoco简单地将存储过程的结果填充到任务对象列表中?如果您只需要数据库中的两列,请不要使用POCOs。使用动态: var d=masterD

我有一个存储过程,它执行类似于:

SELECT a.TaskId, b.CompanyCode FROM task a JOIN company b ON b.CompanyId = a.CompanyId;
我有一个名为TaskItem的对象,该对象具有TaskId和CompanyCode属性,但当我执行以下操作时(我假设该操作有效):


如何使用PetaPoco简单地将存储过程的结果填充到任务对象列表中?

如果您只需要数据库中的两列,请不要使用POCOs。使用动态:

var d=masterDatabase.Query(“Exec-spGetTasks@@numberOfTasks=@0”,numberOfTasks);
var result=d.Select(item=>newtuple(item.TaskId,item.CompanyCode)).ToList();
否则,用于查询数据库的POCO(即,
TaskItem
)需要为查询返回的每个列名具有公共属性

更新 现在您已经发布了
TaskItem
的定义,我看到您已经拥有了所需的所有属性。理论上,只要有一个与返回列名称完全相同的公共属性,就足以填充它。因此,在您的情况下,由于查询返回列
CompanyCode
,因此应该在
TaskItem
上填充相应的属性。如果属性名称不同,可以通过使用
[Column]
属性对其进行装饰来映射

[Column("NameOfTheColumn")]
public string CompanyCode { get; set; }

如果由于某种原因,
CompanyCode
仍然未填充,则问题在于查询。确保它返回适当的结果。

除了使用
动态
作为@Dmitry点外,您还可以将属性添加到
任务项
POCO中,并用
结果列

    [ResultColumn]
    public string CompanyCode { get; set; }

如果您显示了
TaskItem
Sorry@Dmitry的定义,这会有所帮助,只是添加了hanks@Dmitry,但是如果对象开始变得更复杂,比如5或10个属性,该怎么办?谢谢@Dmitry,但是我如何检索和填充数据呢?如果我使用masterDatabase.Fetch,它会抱怨任务表不包含CompanyCode。如果我使用您的动态方式,我将无法单独填充每个字段(此时我看不到使用ORM的优势),我不知道为什么它会抱怨CompanyCode。很明显,它是由您的查询返回的。尝试使用
.Query
谢谢@Dmitry,问题是它假定列属于任务表,但我通过创建一个公司对象并在上执行一次获取来解决这个问题。谢谢你的帮助!谢谢@Eduardo,这是有效的,但是CompanyCode没有填充,是空白的,我如何告诉PetaPoco将生成的CompanyCode列映射到属性?
[Column("NameOfTheColumn")]
public string CompanyCode { get; set; }
    [ResultColumn]
    public string CompanyCode { get; set; }