0

我有以下模型和方法:

[PetaPoco.TableName("TestStep")]
[PetaPoco.PrimaryKey("ID")]
public class TestStep
{
    public int ID { get; set; }

    public int ParentID { get; set; }

    public string Name { get; set; }

    public string Details { get; set; }
}

 public IEnumerable<TestStep> GetById(int ID)
        {
            var db = new PetaPoco.Database("TestProcedureDB");

            return db.Query<TestStep>(@"SELECT * FROM TESTSTEP TS 
                                       INNER JOIN TESTSTEPLINK L ON L.STEPID = TS.ID
                                       WHERE L.TESTID = @0", ID);

        }

填充 POCO 时,ID 属性值是 TESTSTEPLINK 表中 ID 列的值。如果我将查询更改为返回,SELECT TS.*那么一切正常。这是一个错误还是我错过了什么?

4

1 回答 1

0

PetaPoco 将遍历您的所有返回列并映射它们。
首先它将从表 TESTSTEP 映射 Id,然后再次找到 Id,因此它会覆盖先前设置的值。

如果您正在执行这样的连接并且只需要特定信息,您应该只指定要返回的列(否则您会带回比需要更多的数据,这是一个性能问题)

或者按照您所做的那样使用 TS.* 来修复它,以确保仅映射第一个表中的列。

于 2011-08-25T00:07:25.933 回答