什么是DBIO,我如何获得底层对象?

时间:2015-09-24 12:16:16

标签: scala slick

在使用Slick 3.0.3时,在试图解决这个问题how-to-use-slick-code-generator-to-include-database-views-as-well的背景下,我得到了这个:

import slick.dbio.DBIO
import slick.model.Model
import slick.driver.PostgresDriver
import slick.jdbc.meta.MTable
import slick.codegen.SourceCodeGenerator

val model : DBIO[Model] = PostgresDriver.createModel(Some(MTable.getTables(None, None, None, Some(Seq("table1","table2","view1")))))
// SourceCodeGenerator requires a Model and not a DBIO[Model]
val codegen = new SourceCodeGenerator(model)

它几乎就在那里,但是PostgresDriver.createModel返回DBIO[Model]而不是Model,我看不到如何提取模型或者为此运行带有这种模型的生成器参考。无论如何,这个DBIO是什么?

1 个答案:

答案 0 :(得分:2)

DBIO是一种DBIOActionDBIOAction是可以在数据库上执行的操作。但它尚未在数据库上执行。您需要创建与数据库的连接以获取数据库对象,并将DBIO[Model]对象传递给它,该对象应返回Future[Model]

编辑:

有关创建数据库对象的信息,请参阅:http://slick.typesafe.com/doc/3.0.2/gettingstarted.html

您需要在application.conf中拥有正确的配置。然后,您可以使用以下代码:

val db = Database.forConfig("h2mem1")
    val dbio = PostgresDriver.createModel(Some(MTable.getTables(None, None, None, Some(Seq("table1","table2","view1")))))
    val modelF = db.run(dbio) //Produces Future[Model]
    val genF = modelF.map(model => new SourceCodeGenerator(model)) //Produces Future[SourceCodeGenerator]