首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PetaPoco可以使用带有join子句的存储过程填充对象吗?

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

Stack Overflow用户
提问于 2013-06-25 06:04:20
回答 2查看 1.9K关注 0票数 0

我有一个存储过程,它的功能类似于:

代码语言:javascript
复制
SELECT a.TaskId, b.CompanyCode FROM task a JOIN company b ON b.CompanyId = a.CompanyId;

我有一个名为TaskItem的对象,它具有TaskId和CompanyCode属性,但是当我执行以下命令时(我假设它可以工作):

代码语言:javascript
复制
        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的定义:

代码语言:javascript
复制
public class TaskItem {
    public int TaskItemId { get; set; }
    public int CompanyId { get; set; }
    public string CompanyCode { get; set; }
    public int Status { get; set; }
}

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

EN

Stack Overflow用户

回答已采纳

发布于 2013-06-25 07:18:38

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

代码语言:javascript
复制
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]属性对其进行修饰来对其进行映射

代码语言:javascript
复制
[Column("NameOfTheColumn")]
public string CompanyCode { get; set; }

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

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17285914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档