无法从数据存储表中检索和更新实体

时间:2018-02-12 17:07:41

标签: c# .net google-app-engine nosql datastore

我是Google Cloud Datastore(NoSQL db)的新手。我正在使用C#开发一个Web应用程序,我已通过设置GOOGLE_APPLICATION_CREDENTIALS为Google Datastore API成功配置了身份验证。

我也能够在数据存储区中插入数据(实体)(我认为"种类"指的是Google中的表格)。但是,我无法根据检索检索实体,例如,我想从一个名为" Task"的类中检索来自数据存储区的实体。其中一列名为" word"有"你好"在它。

我还想知道我是否可以保留一个数据类型为" string"的列。作为键列(如SQL数据库表中的主键列)。我还需要帮助我如何更新特定实体的列/属性。

                string projectId = "xyz";
                DatastoreDb db = DatastoreDb.Create(projectId);
                Query query = new Query("Task")
                {
                    Filter = Filter.Equal("word", "hello")

                };

                DatastoreQueryResults  dres = db.RunQuery(query);

2 个答案:

答案 0 :(得分:0)

首先,Cloud Datastore中的一种确实相当于SQL中的表。除此之外,每个实体都有一个唯一的标识符,其中包括一个键名字符串和一个数字ID(整数)。

如果您想要检索特定实体,可以根据该实体的密钥使用Lookup function,如下所示:

Entity task = _db.Lookup(_sampleTask.Key);

如果您想要检索多个实体,这也适用:

var keys = new Key[] { _keyFactory.CreateKey(1), _keyFactory.CreateKey(2) };
var tasks = _db.Lookup(keys[0], keys[1]);

要更新特定实体,您可以修改其属性,然后使用之前的相同密钥存储它:

_sampleTask["priority"] = 5;
_db.Update(_sampleTask);

这个link对于了解如何在.NET和C#中使用Cloud Datastore非常有用。它包括一个用于构建基于Datastore的书架并在App Engine中部署它的教程。

对于要用作密钥的内容,Datastore使用祖先结构,就像文件系统目录一样。一个实体可以设置为另一个实体的子实体,成为其父实体,这可以继续,直到用祖先和子项创建完整结构。

这是来自具有祖先的实体的密钥的示例:

[User:alice, TaskList:default, Task:sampleTask]

这是根实体的关键,它没有父母:

[User:alice]

有关祖先路径的详细信息,请查看此link

答案 1 :(得分:0)

在GCP Web控制台中,您可以直接在sql中运行查询,从那里可以快速测试查询是否返回预期结果。

数据存储区要求先创建索引,然后才能从Web控制台查询索引,然后再运行查询,您将了解更多信息。

如果您在Web控制台上看到结果,但是在以编程方式查询时无法检索到结果,则可以检查GCP日志中是否有任何异常,以调试问题。