我有一个表存储表,我想从中获取一些数据。插入和更新查询工作正常,但当我尝试选择一些记录时遇到问题。下面是我到目前为止所做的代码:
class TransactionEntity : TableEntity
{
public String s{ get; set; }
public Int32 r { get; set; }
public String e{ get; set; }
public String t{ get; set; }
public String l{ get; set; }
public TransactionEntity(String id, String s, String e, String t)
{
this.r= 0;
this.s= s;
this.RowKey = id;
this.PartitionKey = Guid.NewGuid().ToString();
this.e= e == null ? "" : e;
this.t= t== null ? "" : t;
}
}
管理表的代码:
class TableStorageManager
{
public Boolean AddTransaction(TransactionEntity dto)
{
try
{
// Create the table client.
CloudTableClient tableClient = new CloudTableClient(new System.Uri(ConfigurationManager.AppSettings.Get("TableStorageURI")), new StorageCredentials(ConfigurationManager.AppSettings.Get("TableStorageUser"), ConfigurationManager.AppSettings.Get("TableStoragePassword")));
CloudTable table = tableClient.GetTableReference(ConfigurationManager.AppSettings.Get("TableStorageName"));
table.CreateIfNotExists();
TableOperation op = TableOperation.Insert(dto);
table.Execute(op);
return true;
}
catch (Exception ex)
{
return false;
}
}
public List<TransactionEntity> RetrieveAllFailedTransactions()
{
try
{
CloudTableClient tableClient = new CloudTableClient(new System.Uri(ConfigurationManager.AppSettings.Get("TableStorageURI")), new StorageCredentials(ConfigurationManager.AppSettings.Get("TableStorageUser"), ConfigurationManager.AppSettings.Get("TableStoragePassword")));
CloudTable table = tableClient.GetTableReference(ConfigurationManager.AppSettings.Get("TableStorageName"));
TableQuery<TransactionEntity> query = new TableQuery<TransactionEntity>().Where("s eq '" + ConfigurationManager.AppSettings.Get("E") + "' and r lt " + ConfigurationManager.AppSettings.Get("M") + "");
query.Take(ConfigurationTasks.GetResultLength());
return table.ExecuteQuery(query).ToList();
}
catch (Exception ex)
{
return null;
}
}
public Boolean UpdateTransactionStatus(TransactionEntity dto)
{
try
{
CloudTableClient tableClient = new CloudTableClient(new System.Uri(ConfigurationManager.AppSettings.Get("TableStorageURI")), new StorageCredentials(ConfigurationManager.AppSettings.Get("TableStorageUser"), ConfigurationManager.AppSettings.Get("TableStoragePassword")));
CloudTable table = tableClient.GetTableReference(ConfigurationManager.AppSettings.Get("TableStorageName"));
dto.ETag = "*";
TableOperation op = TableOperation.Replace(dto);
table.Execute(op);
return true;
}
catch (Exception ex)
{
return false;
}
}
}
另外,我还更改了变量名称,如果你们在阅读它们时遇到一些困难,我很抱歉。
我相信继承 TableEntity 的类中可能缺少默认/无参数构造函数。从 TableStorage 接收对象时,非常需要无参数构造函数来反序列化该对象。
因此,将您的 TableEntity 代码更改为:
class TransactionEntity : TableEntity
{
public String s{ get; set; }
public Int32 r { get; set; }
public String e{ get; set; }
public String t{ get; set; }
public String l{ get; set; }
public TransactionEntity(){//do nothing}
public TransactionEntity(String id, String s, String e, String t)
{
this.r= 0;
this.s= s;
this.RowKey = id;
this.PartitionKey = Guid.NewGuid().ToString();
this.e= e == null ? "" : e;
this.t= t== null ? "" : t;
}
}
尽管我仍然相信,如果您能够分享有关运行代码时遇到的任何异常的更多详细信息,那就太好了。
另请参阅这个链接 https://www.red-gate.com/simple-talk/cloud/cloud-data/an-introduction-to-windows-azure-table-storage/更好地解释如何使用表存储。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)