无法在 CreateQuery 上获取 Azure TableEntity etag



我正在对表中的实体进行查询,更改它们,然后进行替换操作。替换操作失败,因为etag上的etag属性为空。我检查了一下,当我从CreateQuery()调用中获得实体时,etag是空的,但是当我做Retrieve()时填充。是否有一种方法来获得etag手动?

IEnumerable<MyEntity> query = from e in serviceContext.CreateQuery<MyEntity>(tableName)
                                        where e.Id == queryId
                                        select e;
MyEntity entity = query.FirstOrDefault();
// Update the MyEntity object
var replaceOperation = TableOperation.Replace(entity);
MyCloudTableClient.GetTableReference(tableName).Execute(replaceOperation);
// Exception is thrown here that eTag value is null

您是否尝试过使用TableQuery而不是DataServiceQuery?

.

cloudTableClient.GetTableReference(表).CreateQuery ()而不是serviceContext.CreateQuery. @

问题的根源是你混合了两个不同的组件。

serviceContext.CreateQuery<MyEntity>(tableName)

使用System.Data.Services.Client命名空间。在这个模型中,实体本身并不跟踪etag,而是由上下文为您完成。

MyCloudTableClient.GetTableReference(tableName).Execute(replaceOperation)

正在使用Table。通过名称空间。在这个模型中,没有中心上下文,每个实体通过公开Etag属性来跟踪自己的状态。这是通过ITableEntity接口实现的。您从查询中使用的实体不打算与较新的库一起使用,这是问题的根源。

切换到

MyCloudTableClient.GetTableReference(tableName).CreateQuery<MyEntity>()

创建您的查询,您的问题应该会消失。

相关内容

  • 没有找到相关文章

最新更新