使用IncompleteKey创建实体时,每条记录本身都是唯一的,将密钥添加回记录的最佳方法是什么,以便在创建时可以在结构中传递?
例如,像这样(未经测试的代码)是一个好主意,使用Transactions?
SELECT * FROM table1 t
WHERE EXISTS (SELECT 1 FROM table2
WHERE ID = t.ID
AND [Date] >= DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0)
AND [Date] < DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()) + 1, 0));
作为后续行动 - 我猜这应该几乎永远不会失败,因为它几乎不会在同一个不完整的密钥上运行?
答案 0 :(得分:1)
您不需要将MyStruct放入DB两次 - 这是不必要的开销。密钥存储为实体的一部分,可在需要时检索。
在文档中有一个很好的例子,说明如何存储实体并将其用作参考ID:https://cloud.google.com/appengine/docs/go/datastore/entities#Go_Ancestor_paths
如果您想获取实体的密钥,可以使用以下方法执行此操作: https://cloud.google.com/appengine/docs/go/datastore/queries#Go_Retrieving_results - (已编辑的)通知示例中的键和结构在1次操作中填充。
如果您按密钥查询实体,则您已经知道它。
因此不需要将ID作为单独的属性。如果要使用业务逻辑的实体传递它,可以创建一个包装器 - 使用实体结构的interface()或强类型(每个实体结构1个)进行通用化。