我有(工作)以下代码:
val actions = (for {
_ <- slickUsers.insertOrUpdate(dbUser)
loginInfo <- loginInfoAction
_ <- slickUserLoginInfos += DBUserLoginInfo(dbUser.userID, loginInfo.id.get)
} yield ()).transactionally
其中 loginInfoAction 是 DBIOAction。我想将 loginInfoActions 更改为 DBIOAction 的 Seq,然后对每个 DBUserLoginInfo 执行相同的操作。
我愚蠢地尝试过:
val actions = (for {
_ <- slickUsers.insertOrUpdate(dbUser)
loginInfoAction <- loginInfoActions
loginInfo <- loginInfoAction
_ <- slickUserLoginInfos += DBUserLoginInfo(dbUser.userID, loginInfo.id.get)
} yield ()).transactionally
但它没有按预期工作(尽管 loginInfoAction 会迭代 DBIOAction 的 Seq)。我是 Slick 的新手,所以如果我错过了任何内容,请毫不犹豫地向我指出文档!
DBIO.序列
Use DBIO.sequence
转换List[DBIO[_]]
to DBIO[List[_]]
并用于理解。
DBIO.sequence
将 DBIO 的序列转换为DBIO[Seq[_]]
.
例如,假设我们有一个函数getUser
def getUser(userId: Long): DBIO[User]
def getAllUsers(userIds: List[Long]): DB[List[User]] = {
DBIO.sequence(userIds.map(getUser))
}
DBIO.Sequence
皈依者List[DBIO[_]]
to DBIO[List[_]]
现在你的代码变成了
val actions = (for {
_ <- slickUsers.insertOrUpdate(dbUser)
loginInfoActionList <- DBIO.sequence(loginInfoActions)
_ <- DBIO.sequence { loginInfoActionList.map { loginInfo =>
slickUserLoginInfos += DBUserLoginInfo(dbUser.userID, loginInfo.id.get) }
}
} yield ()).transactionally
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)