如果我有一个设置了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团队决定从选择中省略结果列呢? 我应该如何读取结果列?
答案 0 :(得分:2)
我无法回答为什么创作者没有将它们添加到自动选择中,尽管我认为这是因为你的特定用例不是他们正在考虑的主要用例。如果你查看他们网站上的examples and explanation for that feature,它更适合你在连接或计算中带回的额外列(比如查询表中的代码值的描述)。在这些情况下,您无法将它们自动添加到select中,因为它们不是基础表的一部分。
因此,如果您想使用该属性并获取该属性的值,则必须使用您自己的手动选择语句,而不是依赖于自动选择。
当然,使用PetaPoco的好处在于,您可以轻松地修改它以满足您的需求,方法是创建一个新属性,就像您上面建议的那样,或者修改您显示的代码而不从select中排除这些字段(假设您没有在其他连接类型的情况下使用ResultColumn。)