2011-08-24 87 views
0

我有以下模型和方法:PetaPoco返回不正确ID

[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.*然后一切正常。这是一个错误还是我错过了什么?

回答

0

PetaPoco将通过您所有的返回列并映射它们。
首先它将映射来自表TESTSTEP的Id,然后再次找到Id,并覆盖之前设置的值。

如果你正在做一个联接这样,只需要特定的信息,您应该只指定的列要返回(否则你带回比需要的是一个性能问题的详细数据)

或按照您使用TS。*修复它的方式进行操作,以确保仅映射第一个表中的列。