结果列背后的原因是PetaPoco中的自动选择语句被排除在外

时间:2012-03-30 08:06:10

标签: petapoco

如果我有一个设置了ResultColumn属性的POCO类,那么当我进行Single<Entity>()调用时,我的结果列不会被映射。我已将我的列设置为结果列,因为它的值始终由SQL列的默认约束生成。我不希望从业务层注入或更新此列。我想说的是我的列的类型是一个简单的SQL数据类型而不是相关的实体类型(因为我看到ResultColumn主要用于那些)。

查看代码我可以在PetaPoco中看到这一行:

// Build column list for automatic select
QueryColumns = (   from c in Columns
                   where !c.Value.ResultColumn
                   select c.Key
               ).ToArray();

为什么结果列被排除在自动select语句之外,因为据我所知,它们的本质是只读。因此在中仅用于选择。当列实际上是一个相关的实体类型(复杂)时,我可以看到这种情况。好。但是我们应该有一个像ComputedColumnAttribute这样的单独属性,它总是在选择中返回但从未在插入或更新中使用过......

为什么PetaPoco团队决定从选择中省略结果列呢? 我应该如何读取结果列?

1 个答案:

答案 0 :(得分:2)

我无法回答为什么创作者没有将它们添加到自动选择中,尽管我认为这是因为你的特定用例不是他们正在考虑的主要用例。如果你查看他们网站上的examples and explanation for that feature,它更适合你在连接或计算中带回的额外列(比如查询表中的代码值的描述)。在这些情况下,您无法将它们自动添加到select中,因为它们不是基础表的一部分。

因此,如果您想使用该属性并获取该属性的值,则必须使用您自己的手动选择语句,而不是依赖于自动选择。

当然,使用PetaPoco的好处在于,您可以轻松地修改它以满足您的需求,方法是创建一个新属性,就像您上面建议的那样,或者修改您显示的代码而不从select中排除这些字段(假设您没有在其他连接类型的情况下使用ResultColumn。)