Slick 3.0.0 - 多个插入相互依赖 return 值

Slick 3.0.0 - multiple inserts depending on each other with return value

我正在尝试更新到 Slick 3.0.0(反应式 Slick),但是我无法让最基本的东西工作。在我可以做类似 db.withTransaction { ... } 的事情之前它会 运行,但是我什至无法编译它:

def insertNewFacebookUser(
  facebookId: String,
  email: String,
  firstName: String,
  lastName: String
) = {
  val user =
  (Users.map(u ⇒ (u.email, u.firstName, u.lastName)) returning Users) +=
    ((email, firstName, lastName))

  FacebookAuths.map(f ⇒ (f.userId, f.facebookId)) += ((user.id, facebookId))

  user
}

这只是抱怨 user.id 被包裹在一些 DBIOAction 中,我应该如何编写它才能编译?

谢谢

在不了解更多架构的情况下:

def insertNewFacebookUser(
  facebookId: String,
  email: String,
  firstName: String,
  lastName: String
): DBIOAction[???, ???, ???] = for {
      userId <- Users returning Users.map(_.id) += (email, firstName, lastName)
       _     <- FacebookAuths += (userId, facebookId)
    } yield (User(userId, email, firstName, lastName))

val user: Future[User] = db.run(insertNewFaceBookUser(....)

我不确定返回的 DBIOAction 的确切类型是什么,因为它取决于您的模式,因此 ???。一切都包含在某种动作中,因此当您尝试直接在 FacebookAuths 的插入中使用 userId 时,它是错误的类型。相反,您想要做的是对返回的结果 map/flatMap 并编写更完整的操作。 for {...} yield 只是 mapflatMap 的糖分。然后,您 run 采取行动以获得 Future 结果。然后,您可以根据需要 map