在Slick的早期版本中,在TableQuery上定义了一个返回插入结果的插入函数。我正在迁移到新API并执行以下操作:
DBIO.seq(someTable += someValue)
但这有类型
dbio.DBIOAction[Unit, NoStream, Write]
如何取回受影响的行?
修改
这里的问题似乎是这些类型并没有像我期望的那样排成一行。以下是Scala将其视为以下类型的内容:
val q: PostgresDriver.DriverAction[PostgresDriver.InsertActionExtensionMethods[(String, String)]#SingleInsertResult, NoStream, Write] = Admins.tableQuery += ((username, grantor))
val seq: dbio.DBIOAction[Unit, NoStream, Write] = DBIO.seq(q)
db.run(seq)
这对我没有意义。如果q
的类型为DriverAction[PostgresDriver.InsertActionExtensionMethods[(String, String)]#SingleInsertResult...
,其中SingleInsertResult是Int
的类型别名,那么我的DBIO.seq
不应该返回DBIOAction[Int, NoStream, Write]
吗?
答案 0 :(得分:1)
它与光滑的2.x没有什么不同,但现在一切都返回Futures。
也许是某些事情(在我的头顶,我现在无法自己测试)
val users = TableQuer[Users]
// this is the query
val q = (users += User(None, "Stefan", "Zeiger"))
// now you run it
db.run(q).map{ affectedRows =>
case 1 => println("success")
case _ => println("oops")
}