Playframework 使用Slick 3.0在同一事务中进行多个插入 我正在使用SLIK2.1.0升级Slay框架应用程序,以播放SLIC1.0.0(包括SLIC3.0.0)。

Playframework 使用Slick 3.0在同一事务中进行多个插入 我正在使用SLIK2.1.0升级Slay框架应用程序,以播放SLIC1.0.0(包括SLIC3.0.0)。,playframework,slick,play-slick,Playframework,Slick,Play Slick,我在理解如何处理交易时遇到了一些问题 假设我有以下代码: db.withTransaction { implicit session => for (id <- ids) yield someTable.insert(SomeObject(id)) } db.withTransaction{implicit session=> 对于(id,根据,您可以在db操作上使用。事务性: val a = (for { ns <- coffees.filter(_.name.

我在理解如何处理交易时遇到了一些问题

假设我有以下代码:

db.withTransaction { implicit session =>
    for (id <- ids) yield someTable.insert(SomeObject(id))
}
db.withTransaction{implicit session=>
对于(id,根据,您可以在db操作上使用
。事务性

val a = (for {
  ns <- coffees.filter(_.name.startsWith("ESPRESSO")).map(_.name).result
  _ <- DBIO.seq(ns.map(n => coffees.filter(_.name === n).delete): _*)
} yield ()).transactionally

val f: Future[Unit] = db.run(a)
val a=(用于{

ns我有一个稍微不同的场景,我必须在同一事务中更新两个表,下面的代码似乎是实现这一点的最优雅的方式:

val c: DBIOAction[(Int, Int), NoStream, Effect.Write with Effect.Write] = for{
      i1 <- (tbl1 += record1)
      i2 <- (tbl2 += record2)
    } yield {
      (i1,i2)
    }
val f = db run c.transactionally

在最初的用例中,您可以简单地用自己的代码构造动作以供理解。

这不起作用。似乎不再存在函数
insert
。我尝试将其替换为
+=
,但这也不起作用。经过一番尝试后,我得出了以下结论:
val toInsert=for(id
val c: DBIOAction[(Int, Int), NoStream, Effect.Write with Effect.Write] = for{
      i1 <- (tbl1 += record1)
      i2 <- (tbl2 += record2)
    } yield {
      (i1,i2)
    }
val f = db run c.transactionally
val actions = Seq((tbl1 += record1), (tbl2 += record2))
val dbActions: DBIOAction[Seq[Int], NoStream, Effect.Write with Effect.Transactional]
    =  DBIOAction.sequence(actions).transactionally
val f = db run dbActions