2015-09-04 8 views
5

私はずっとSlickを使ってきましたが、今はSlick 2.1から3.0に移行しています。 Unfortunatelly私は線を数えるような普通のもので立ち往生した。私はintとしての私の結果になるだろう上記のコードでSlick 3.0でのカウント方法(*)

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

を、私はスリック3.0に移動した後、私はそれが今で動作させることはできません:私はこれを行うために使用されるとき私のコードはスリック2.1に完全に働きました.2 though the documentation tells me that the code should be the same

私は(私はすでにwithSessionがコールを非推奨削除)次のことを試してみました:

connection.createSession.withTransaction { 
    coffees.length 
} 

しかし、このコードは、整数値を取得する任意の方法を持っていないslick.lifted.Rep [のInt]を返します。 。暗黙的なインポートが不足していますか?

答えて

3

あなたはおそらく実現してきたように、run呼び出しの結果は、いくつかの後の時点で解決しますFutureを生成することです。

これはあなたの答えに表示のように、最終的にどこかのコードでは、今後はこれができ、方法で上待っする必要があります、そして、できるだけ遅く押し戻されるべきであることを意味しています。たとえば、Playフレームワークで作業している場合は、非同期アクションを使用して、Playで処理します。伝播Futureコンテキスト内のあなたの計算mapflatMaponSuccessを呼び出すというように連鎖へ - Futureあなたが他のモナド構築物(のようなOption)同じようにして、その間の仕事で

+0

良い点。私の元のアプリケーションはもともとPlayのコンテキストの下にあることを意図したものではありませんでしたが、近い将来にPlay Webサービスに統合されるため、作業を行う必要があります。ご回答有難うございます。 –

1

私の質問に答えるより良い方法があると教えてください。私はそれがこれをやって動作するようになったが、これはひどいです:

import scala.concurrent.duration._ 
import scala.concurrent.Await 
val timeout = Duration(10, SECONDS) 
val count = Await.result(connection.run(coffees.length.result), timeout) 
+0

クエリを実行して結果を待つ汎用メソッドを記述するのはかなり簡単ですので、どこでもその "醜さ"は必要ありません。 – JimN

+0

私は、Slick 3がバージョン2のような仕事をするためにいくつかの黙示を持っていないのはなぜかと思う。 –

関連する問題