2

如果我有一个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();

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

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

4

1 回答 1

2

我无法回答为什么创建者没有将它们添加到自动选择中,尽管我认为这是因为您的特定用例不是他们考虑的主要用例。如果您在他们的网站上查看该功能的示例和说明,它更适合您在连接或计算中带回的额外列(例如可能来自查找表的代码值描述)。在这些情况下,您不能将它们自动添加到选择中,因为它们不是基础表的一部分。

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

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

于 2012-03-30T09:00:33.927 回答