cha*_*ani 6 azure azure-table-storage
我正在查询表中的实体,更改它们,然后执行替换操作.替换操作失败,因为etag上的etag属性为null.我检查过,当我从CreateQuery()调用中获取实体时etag为null,但是当我执行Retrieve()时填充etag.有没有办法手动获取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
问题源于您混合了两种不同的组件。
serviceContext.CreateQuery<MyEntity>(tableName)
正在使用 System.Data.Services.Client 命名空间。在此模型中,实体本身不跟踪 etag,上下文会为您执行此操作。
MyCloudTableClient.GetTableReference(tableName).Execute(replaceOperation)
正在使用 Table.DataServices 命名空间。在此模型中,没有中央上下文,每个实体通过公开 Etag 属性来跟踪自己的状态。这是通过 ITableEntity 接口强制执行的。您从查询中使用的实体不适合与较新的库一起使用,这是问题的根源。
切换到使用
MyCloudTableClient.GetTableReference(tableName).CreateQuery<MyEntity>()
创建您的查询,您的问题就会消失。
| 归档时间: | 
 | 
| 查看次数: | 740 次 | 
| 最近记录: |