在使用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是什么?
答案 0 :(得分:2)
DBIO
是一种DBIOAction
。 DBIOAction
是可以在数据库上执行的操作。但它尚未在数据库上执行。您需要创建与数据库的连接以获取数据库对象,并将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]