我有很多特殊的实体,但它们不是db模式的一部分。由于这些实体是特殊的,所以我为它们设置了一些:db/ident属性,以便在我的程序中方便地访问它们。
假设我现在将其中一个帐户称为:base-account,问题是当我使用实体api访问这些实体时,我遇到了这个问题:
;; access some entity that references one of the special entities
> (d/touch (d/entity db 12345678))
==>
{:transaction/amount 22334455,
:transaction/from {:db/id 0987654}, ;; normal reference to an entity
:transaction/to :base-account} ;; this is a reference to a special account with a :db/ident attribute这给我以前编写的一些代码带来了问题,因为这不会给我提供:transaction/to帐户的详细信息。
因此,为了解决这个问题,我从这些实体中删除了:db/ident属性:
> (d/transact connection [[:db/retract id-of-the-special-account
:db/ident :base-account]])它成功地从实体中删除:db/ident:
> (:db/ident (d/entity db id-of-the-special-account))
==> nil但是由于某些原因(可能是一个bug),实体api调用仍然用它的旧标识引用它:
> (d/entity db :base-account) ;; should not work
==> {:db/id id-of-the-special-account}那么,我如何才能从这些实体中删除标识,而不必将它们完全从数据库中删除呢?或者用一种正常的方式修复(d/entity ....)调用的工作方式?
编辑:我使用的是数据-pro-5544
发布于 2017-07-17 21:35:12
来自数据体文档
and应该用于两个目的:命名架构实体和实现枚举标记。这两种用途都将在介绍性教程中演示。为了支持这些用法,身份证明有两个特殊的特点:
最后一点可能会影响到你。
下一段:
这些特征还意味着不应使用身份证明文件的情况:
这样看来,您可能希望重新设计DB,而不是尝试取消对:db/ident的使用。
https://stackoverflow.com/questions/45010596
复制相似问题