持久性:将文本转换为键

Posted

技术标签:

【中文标题】持久性:将文本转换为键【英文标题】:Persistent: Convert Text to Key 【发布时间】:2013-03-11 02:29:29 【问题描述】:

我正在使用持久化和持久化-mysql。我有一个 Monad SqlM

type SqlM a = SqlPersist (ResourceT IO) a) 

在我的函数内部

testFun :: T.Text -> SqlM ()
testFun someId = ...

我可以使用查询数据库

entity <- selectFirst [SomeField ==. someId]

但我想按 ID 选择实体。我必须将 someId 转换/打包为 Key - Type。我知道这不是这样做的方法,但我试过了:

entity <- get $ Key  unKey = PersistInt64 (read $ T.unpack someId) 

这失败了:

Couldn't match type `PersistEntityBackend
                       (Entity (DBTableGeneric backend0))'
              with `Database.Persist.GenericSql.Raw.SqlBackend'
The type variable `backend0' is ambiguous
Possible fix: add a type signature that fixes these type variable(s)
Expected type: Key (Entity (DBTableGeneric backend0))
  Actual type: KeyBackend
                 Database.Persist.GenericSql.Raw.SqlBackend
                 (Entity (DBTableGeneric backend0))
In the second argument of `($)', namely
  `Key unKey = PersistInt64 (read $ T.unpack someId)'

有什么想法吗?

【问题讨论】:

【参考方案1】:

我通常使用fromPathPiece 进行这种转换。至于您的错误消息,您可能只需添加一个类型签名以向编译器阐明您正在使用的类型。

【讨论】:

我必须将类型签名添加到什么?我尝试将它添加到键 KeyBackend SqlBackend 实体,但我仍然收到上面显示的错误。 试试(fromPathPiece someId :: Maybe DBTableId) 非常感谢您的快速帮助,成功了!

以上是关于持久性:将文本转换为键的主要内容,如果未能解决你的问题,请参考以下文章

持久性无法将预期类型“键表”与实际类型文本匹配

在 sklearn 中持久化数据

UITableView 中的 NSUserDefaults 和持久性

Azure Service Fabric 中的有状态服务和外部持久性之间的转换

我应该将实体(持久)对象转换为 DTO 对象吗?

数据持久层