我有以下模型和方法:
[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 :(得分:0)
PetaPoco将浏览您的所有返回列并映射它们 首先,它将从表TESTSTEP映射Id,然后它再次找到Id,因此它会覆盖先前设置的值。
如果您正在进行这样的连接并且只想要特定信息,那么您应该只指定要返回的列(否则您将带回的数据超出需要的数据,这是性能问题)
或者像使用TS。*一样修复它,以确保只映射第一个表中的列。