当select查询不包含预期列

时间:2017-02-27 15:47:03

标签: ado.net mapping dapper

使用Dapper时如下:

connection.Query("select a from Foo").Select(x => new Foo(x.a, x.b));

我的偏好是在尝试访问x.b时抛出异常,而不是只返回null。

我知道只返回null可能是设计的(例如出于性能原因),理想情况下会存在标记缺失数据的测试,但如果我可以同时使用这两者,这似乎是一个额外的安全层,可能是值得拥有。

或者,是否存在另一种使用构造函数实例化对象的方法,该方法会在缺少所需列时抛出异常?

1 个答案:

答案 0 :(得分:0)

烨。小巧玲珑似乎常常乐观地站在错误的一边。每个错误都是运行时错误,就像在这种情况下,您希望错误的一些事情直接通过。

如果您使用QueryFirst,您甚至不需要运行该程序。这将在您键入时捕获。您可以通过生成的POCO访问查询结果,因此如果查询中没有列,则它不在POCO中。如果您使用select *,然后从数据库中删除一个列,则可以重新生成所有查询,编译错误将指向代码中尝试访问已删除列的行。

下载here

简短视频演示here

免责声明:我写过QueryFirst