我针对数据库(sqlserver db)运行自动生成器,并生成了许多表定义。
我希望使用这些定义来填充新数据库 - 我以为我只是使用Tables.ddl.create
但我看到了编译错误(value create is not a member of app.db.Tables.profile.DDL
)
另外,一旦创建了一个表,填充它的规范模式是什么? (自动生成的代码似乎不包含*
个投影 - 这是故意的吗?)
示例自动生成表定义:
/** Entity class storing rows of table SampleTable
* @param sampletableid Database column SampleTableId DBType(uniqueidentifier), Length(36,false)*/
case class SampleTableRow(sampletableid: Option[String])
/** GetResult implicit for fetching SampleTableRow objects using plain SQL queries */
implicit def GetResultSampleTableRow(implicit e0: GR[Option[String]], e1: GR[Int], e2: GR[Option[java.sql.Clob]], e3: GR[java.sql.Timestamp]): GR[SampleTableRow] = GR{
prs => import prs._
SampleTableRow.tupled((<<?[String]))
}
/** Table description of table SampleTable. Objects of this class serve as prototypes for rows in queries. */
class SampleTable(_tableTag: Tag) extends Table[SampleTableRow](_tableTag, Some("dbo"), "SampleTable") {
def * = (sampletableid) <> (SampleTableRow.tupled, SampleTableRow.unapply)
/** Maps whole row to an option. Useful for outer joins. */
def ? = (sampletableid).shaped.<>({r=>import r._; _3.map(_=>SampleTableRow.tupled((_1)))}, (_:Any) => throw new Exception("Inserting into ? projection not supported."))
/** Database column SampleTableId DBType(uniqueidentifier), Length(36,false) */
val sampletableid: Column[Option[String]] = column[Option[String]]("SampleTableId", O.Length(36,varying=false))
}
/** Collection-like TableQuery object for table SampleTable */
lazy val SampleTable = new TableQuery(tag => new SampleTable(tag))
答案 0 :(得分:0)
您可以使用Slick执行的通用Table对象的示例(假设您有数据库:范围内的数据库):
abstract class genericTable[T <: Table[A] , A] {
val table: TableQuery[T]
/**
* regenerate the table based on its definition in code
*/
def create = database.withSession { implicit session =>table.ddl.create }
/**
* drop the table from schema
*/
def drop = database.withSession { implicit session =>table.ddl.drop }
/**
* insert an entry of the given type
*/
def insert(entry: A): A = database.withSession { implicit session =>
table += entry
}
/**
* insert several entries of the given type
*/
def insertAll(entries: List[A]) = database.withSession { implicit session =>
table.insertAll(entries:_*) }
/*
* return all elements from the given table
*/
def all: List[A] = database.withSession { implicit session =>
table.list.map(_.asInstanceOf[A])
}
}
然后您可以将具体查询对象定义为:
object sampleTable extends genericTable(SampleTable, SampleTableRow) {
val table = TableQuery[SampleTable]
}
并获取您在基类中定义的所有方法。这意味着,从其他地方你可以拨打电话:
val allSampleRecords = sampleTable.all
sampleTable.insertAll(List(SampleTableRow(None), SampleTableRow(Some("anEntry"))))
因为已经定义了all和insertAll方法。
如果有一些更通用的方法将数据序列化到用Slick定义的表格,我也很想知道它们:)