9

我使用 Slick 已经有一段时间了,现在我正在从 Slick 2.1 迁移到 3.0。不幸的是,我被一些普通的东西困住了,比如数线。当我以前这样做时,我的代码在 Slick 2.1 中运行良好:

connection.withSession {
  implicit session => coffees.length.run
}

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

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

connection.createSession.withTransaction {
  coffees.length
}

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

4

2 回答 2

4

正如您可能已经意识到的那样,run调用的结果是生成一个Future,它将在稍后解决。

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

在此期间Future,您可以像使用任何其他一元构造(如Option)一样使用map,等flatMaponSuccess以在传播的Future上下文中链接您的计算。

于 2015-09-04T23:27:14.853 回答
3

请有人告诉我有更好的方法来回答我的问题。我让它工作,但这看起来很糟糕:

import scala.concurrent.duration._
import scala.concurrent.Await
val timeout = Duration(10, SECONDS)
val count = Await.result(connection.run(coffees.length.result), timeout)
于 2015-09-04T20:21:46.687 回答