帖子问题是here。
我使用的库是Google Cloud Libraries for .NET。
现在我只使用单个实体就没有问题,但是在尝试通过检索实体的标识时遇到了另一个问题。
问题在下面列出:
如何使用库插入带有祖先的实体?
使用祖先插入实体后,如何获取插入的实体的身份?
如何使用PathElement
?
我的英语能力很差,所以请不要介意,因为我对文档没有完全理解。
如果有不当之处或描述不正确,请告诉我。
任何事情都会受到赞赏。
答案 0 :(得分:1)
要创建带有祖先的实体,只需确保提供的键具有该祖先即可。如果您乐于指定新路径元素的名称部分,创建新键的最简单方法是调用祖先键上的Key.WithElement
,但要使用新的路径元素。
如果您想生成密钥,此刻会有点困难,因为在Key
上没有像WithElement
那样的方法来创建具有不完整的final元素的新密钥。不过,您可以轻松编写自己的扩展方法。
当您插入实体时,将通过Insert
方法返回插入的键。这是一个完整的示例,首先创建一个“书架”实体,然后创建三个“书”实体作为其子实体:
KeyFactory
生成的不完整密钥的密钥,以证明该选项。代码:
using Google.Cloud.Datastore.V1;
using System;
using static Google.Cloud.Datastore.V1.Key.Types;
static class KeyExtensions
{
// Useful extension method to create an incomplete "child" key
public static Key WithIncompleteElement(this Key key, string kind)
{
Key ret = key.Clone();
ret.Path.Add(new PathElement { Kind = kind });
return ret;
}
}
class Program
{
static void Main(string[] args)
{
string projectId = "YOUR-PROJECT-ID-HERE";
DatastoreDb client = DatastoreDb.Create(projectId);
Entity shelf = new Entity
{
Key = client.CreateKeyFactory("shelf").CreateIncompleteKey(),
["genre"] = "fiction"
};
Key shelfKey = client.Insert(shelf);
// Insert a book specifying a complete key
Entity book1 = new Entity
{
Key = shelfKey.WithElement("book", "potter1"),
["title"] = "Harry Potter and the Philosopher's Stone"
};
Key book1Key = client.Insert(book1);
// Insert a book by creating an incomplete key with the extension method
Entity book2 = new Entity
{
Key = shelfKey.WithIncompleteElement("book"),
["title"] = "Harry Potter and the Chamber of Secrets"
};
Key book2Key = client.Insert(book2);
Console.WriteLine($"Inserted key: {book2Key}");
// Insert a book by creating an incomplete key with a KeyFactory
KeyFactory keyFactory = new KeyFactory(shelf, "book");
Entity book3 = new Entity
{
Key = keyFactory.CreateIncompleteKey(),
["title"] = "Harry Potter and the Prisoner of Azkaban"
};
Key book3Key = client.Insert(book3);
Console.WriteLine($"Inserted key: {book3Key}");
Console.WriteLine();
// List all the books
var books = client.RunQuery(new Query { Kind = { new KindExpression { Name = "book" } } });
Console.WriteLine("All books:");
foreach (var book in books.Entities)
{
Console.WriteLine($"{(string) book["title"]}: Key={book.Key}");
}
}
}