2016-08-13 1 views
0

Ich migriere von Slick 2.1 zu 3.0. Wie Sie wissen, ist die Funktion withSession veraltet.Scala play withSession veraltet

Wie kann ich ändern Code unten:

def insert(vote: Vote) = DB.withSession { implicit session => 
    insertWithSession(vote) 
} 
def insertWithSession(vote: Vote)(implicit s: Session) = { 
    Votes.insert(vote) 
} 

ich auf Votes.insert Compiler-Fehler haben, und der Fehler ist:

could not find implicit value for parameter s: slick.driver.PostgresDriver.api.Session 

Endlich Gibt es irgendein anderes Dokument als official link mir helfen migrieren. Ich brauche mehr Details.

Antwort

1

Angenommen, Sie verwenden Play-Slick für eine reibungslose Integration mit dem Spiel.

Weitere Einzelheiten finden Sie unter https://www.playframework.com/documentation/2.5.x/PlaySlick.

Fügen Sie die glatten und jdbc Abhängigkeiten in build.sbt

libraryDependencies ++= Seq(
    "com.typesafe.play" %% "play-slick" % "2.0.0", 
    "com.typesafe.play" %% "play-slick-evolutions" % "2.0.0" 
    "org.postgresql" % "postgresql" % "9.4-1206-jdbc4" 
) 

Fügen Sie die Postgres-config in Ihrem application.conf

slick.dbs.default.driver="slick.driver.PostgresDriver$" 
slick.dbs.default.db.driver="org.postgresql.Driver" 
slick.dbs.default.db.url="jdbc:postgresql://localhost/yourdb?user=postgres&password=postgres" 

nun Ihre Modelle wie die folgenden definieren,

package yourproject.models 

import play.api.db.slick.DatabaseConfigProvider 
import slick.driver.JdbcProfile 

case class Vote(subject: String, number: Int) 

class VoteTable(tag: Tag) extends Table[Vote](tag, "votes") { 
    def id = column[Int]("id", O.PrimaryKey, O.AutoInc) 
    def subject = column[String]("subject") 
    def number = column[Int]("number") 

    def * = (id.?, subject, number) <> (Vote.tupled, Vote.unapply) 
} 

class VoteRepo @Inject()()(protected val dbConfigProvider: DatabaseConfigProvider) { 
    val dbConfig = dbConfigProvider.get[JdbcProfile] 
    val db = dbConfig.db 
    import dbConfig.driver.api._ 

    val Votes = TableQuery[VoteTable] 

    def insert(vote: Vote): DBIO[Long] = { 
    Votes returning Votes.map(_.id) += vote 
    } 

} 

Jetzt wird Ihr Controller etwa wie folgt aussehen:

import javax.inject.Inject 

import yourproject.models.{VoteRepo} 
import play.api.libs.concurrent.Execution.Implicits.defaultContext 
import play.api.mvc.{Action, Controller} 

class Application @Inject()(voteRepo: VoteRepo) extends Controller { 

    def createProject(subject: String, number: Int) = Action.async { 
    implicit rs => { 
     voteRepo.create(Vote(subject, number)) 
     .map(id => Ok(s"project $id created")) 
    } 
    } 

} 
+0

Was muss ich hinzufügen, um Postgre als Datenbanktreiber zu verwenden? –