使用 WCF 数据服务客户端进行 Azure 表存储 - 存储对象图

发布于 2024-10-10 10:46:36 字数 567 浏览 6 评论 0原文

我正在使用 .NET API(TableServiceContext、WCF 数据服务等)使用 Azure 表存储。我有一个简单的对象图,我想将其保存到表存储中。在服务上下文类中,我有以下代码。

_TableClient.CreateTableIfNotExist("AggRootTable");
this.AddObject("AggRoots", model);
foreach (var related in model.RelatedObjects)
{
    this.AddRelatedObject(model, "RelatedCollection", related);
}
this.SaveChanges();

我已通过 EF 和 SQL Server 在 WCF 数据服务中使用了这种类型的代码,但它不适用于 Azure 表。我不希望它发生,因为 Azure 中的表之间没有真正的关系。不过,方法还是有的。有谁知道如何在 Azure Tables 上下文中使用 AddRelatedObject、AddLink 等?或者可以建议一般存储对象图的方法吗?我没能找到任何文档,谷歌也没有提供帮助。

谢谢, 埃里克

I am working with Azure Table storage using the .NET API (TableServiceContext, WCF Data Service, etc). I have a simple graph of objects that I want to save to the table store. In the service context class, I have the following code.

_TableClient.CreateTableIfNotExist("AggRootTable");
this.AddObject("AggRoots", model);
foreach (var related in model.RelatedObjects)
{
    this.AddRelatedObject(model, "RelatedCollection", related);
}
this.SaveChanges();

I have used this style of code in WCF Data Services via EF and a SQL Server, but it doesn't work against Azure Tables. I would not expect it to, as there aren't real relationships between tables in Azure. However, the methods are there. Does anyone know how to use AddRelatedObject, AddLink, etc in the context of Azure Tables? Or can suggest approaches to storing object graphs in general? I haven't been able to find any docs, and Google hasn't been helpful.

Thanks,
Erick

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

2024-10-17 10:46:36

你不能。 ATS 不支持关系。由于它使用数据服务API,因此有许多非工作方法可用。

但是,您可以做的是将完整的对象树存储在单个表中。不确定这是否也适用于您的设计/架构

,在每次写入操作之前继续调用 CreateIfNotExists 是一个坏主意。首先,您需要为往返发生的事务支付额外费用,其次,调用不是即时的,会减慢您的写入速度。
只需在部署之前或角色启动期间预先创建表即可。

You can't. ATS does not support relationships. There are many non-working methods available due to it using data services API.

What you can do, however, is store the full object tree in a single table. Not sure if this will work for your design/architecture

also, it is a bad idea to keep calling CreateIfNotExists before every write operation. First, you pay extra for transactions that occur for the round-trip, second the call is not instantaneous and will slow down your writes.
just precreate the tables before deployment or during roles start.

娜些时光,永不杰束 2024-10-17 10:46:36

表存储服务通常不是存储整个对象图的好地方,因为每行/实体都有大小限制(1 MB,IIRC)。显然,如果您知道对象图永远不会很大,您可能不会关心...

一个好的替代方案通常是在 Blob 存储中存储序列化图。但是,您必须制定如何处理版本控制的策略。

The Table Storage Service is generally not a good place to store entire object graphs, since there's a size limit (of 1 MB, IIRC) on each row/entity. Obviously, if you know that your object graphs will never be large, you may not care...

A good alternative is often to store a serialized graph in Blob Storage. However, you must have a strategy for how to handle versioning.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文