如何在Slick 3.0中COUNT(*)?

Wil*_*lho 7 scala slick slick-3.0

我已经使用Slick很长一段时间了,现在我正在从Slick 2.1迁移到3.0.不幸的是,我遇到了像计数线这样的普通东西.当我以前这样做时,我的代码在Slick 2.1中完美运行:

connection.withSession {
  implicit session => coffees.length.run
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我会得到我的结果作为Int,但是在我转移到Slick 3.0.2之后我无法让它工作,尽管文档告诉我代码应该是相同的.

我尝试了以下内容(我已经删除了withSession不推荐的调用):

connection.createSession.withTransaction {
  coffees.length
}
Run Code Online (Sandbox Code Playgroud)

但是这段代码将返回一个slick.lifted.Rep [Int],它没有任何方法来获取整数值.我错过了一些隐含的导入吗?

Sha*_*nds 4

您可能已经意识到,调用的结果run是生成一个Future,它将在稍后的某个时刻解析。

虽然这意味着最终在代码中的某个地方需要以您在答案中显示的方式等待,但这可以而且应该尽可能晚地推迟。例如,如果您正在使用 Play 框架,请使用异步操作并让 Play 为您处理。

同时,像Future使用任何其他一元构造(例如)Option一样使用map、等来将您的计算链接到传播的上下文中。flatMaponSuccessFuture