2016-04-02 23 views
1

我在写一个方法从Azure表存储服务中检索实体。我需要以类型User而不是TableResult的形式返回实体。以下编译,但总是返回空值:强制Azure表存储TableResult到类

var partitionKey = "user"; 

      var retrieveOperation = TableOperation.Retrieve<TableEntity>(partitionKey, userName); 
      var result = _table.Execute(retrieveOperation); 

      if (result == null) 
      { 
       return null; 
      } 

      return result.Result as User; 

我假设这是因为从TableResult转换到用户由于某种原因无法正常工作。将其转换为(User)result.Result在运行时会动态引发错误。我在一个实体列表中看到了一个使用Linq的例子,但你如何得到一个单一的结果呢?

回答

1

如果实体从TableEntityUser继承(或实现ITableEntity):

public class User : TableEntity { } 

您可以指定结果的类型:

var retrieveOperation = TableOperation.Retrieve<User>(partitionKey, userName); 
你的情况

因此,它看起来像这样:

var partitionKey = "user"; 
var retrieveOperation = TableOperation.Retrieve<User>(partitionKey, userName); 
var result = _table.Execute(retrieveOperation); 
if (result == null) 
{ 
    return null; 
} 
return result.Result as User; 

Anot她的做法是用DynamicTableEntity类:

var partitionKey = "user"; 
// The default result type is DynamicTableEntity 
var retrieveOperation = TableOperation.Retrieve(partitionKey, userName); 
var result = _table.Execute(retrieveOperation); 
if (result == null) 
{ 
    return null; 
} 
return result.Result as DynamicTableEntity; 
+0

谢谢Thomas!那是失踪的关键。我完全忽略了这部分代码。我实际上使用Rory Primrose的EntityAdapter,所以我需要指定作为返回类型,但是这个技巧。见http://www.neovolve.com/2013/11/18/entity-adapter-for-azure-table-storage/。 –

+1

@AndrewBSchultz,你甚至不需要使用这个类,有一个'DynamicTableEntity'类:https://msdn.microsoft.com/library/azure/microsoft.windowsazure.storage.table.dynamictableentity.aspx。 – Thomas