在这里由于篇幅,我们只是介绍核心代码的编写。要使用Windows Azure Table,就需要创建相关的实体类,本案例中的实体类是ImageEntity,图片实体类,这个实体类是需要继承TableServiceEntity的,代码如下:
public class ImageEntity:TableServiceEntity
{
public ImageEntity()
{
PartitionKey = DateTime.UtcNow.ToString("yyyyMMdd");
RowKey = string.Format("{0:10}_{1}", DateTime.MaxValue.Ticks -
DateTime.Now.Ticks, Guid.NewGuid());
}
public Uri FileUri { get; set; }
public string FileName { get; set; }
public long Length { get; set; }
public string FolderName { get; set; }
public bool IsReadOnly { get; set; }
public bool IsExists { get; set; }
public string FullFileName { get; set; }
public string ExtendName { get; set; }
public string CreatorName { get; set; }
public DateTime CreateTime { get; set; }
}
{
public ImageEntity()
{
PartitionKey = DateTime.UtcNow.ToString("yyyyMMdd");
RowKey = string.Format("{0:10}_{1}", DateTime.MaxValue.Ticks -
DateTime.Now.Ticks, Guid.NewGuid());
}
public Uri FileUri { get; set; }
public string FileName { get; set; }
public long Length { get; set; }
public string FolderName { get; set; }
public bool IsReadOnly { get; set; }
public bool IsExists { get; set; }
public string FullFileName { get; set; }
public string ExtendName { get; set; }
public string CreatorName { get; set; }
public DateTime CreateTime { get; set; }
}
创建完图片实体类后,需要接着创建ImageContext,这个类是通过上下文环境对实体进行添加、修改、查询的类,此类需要继承自TableServiceContext,代码如下:
public class ImageContext:TableServiceContext
{
private const string ENTITY_NAME = "imageentity";
public ImageContext(string baseAddress, StorageCredentials credentials)
: base(baseAddress, credentials)
{
CloudTableClient.CreateTablesFromModel(typeof(ImageContext), baseAddress, credentials);
}
public IQueryable<ImageEntity> ImageEntity
{
get { return CreateQuery<ImageEntity>(ENTITY_NAME); }
}
/// <summary>
/// Add object to table
/// </summary>
/// <param name="data">ImageEntity object to add</param>
public void Add(ImageEntity data)
{
AddObject(ENTITY_NAME, data);
SaveChanges();
}
/// <summary>
/// Update object
/// </summary>
/// <param name="original">Original ImageEntity object</param>
/// <param name="data">Updated object</param>
public void Update(ImageEntity original, ImageEntity data)
{
original.CreateTime = data.CreateTime;
original.CreatorName = data.CreatorName;
original.ExtendName = data.ExtendName;
original.FileName = data.FileName;
original.FileUri = data.FileUri;
original.FolderName = data.FolderName;
original.FullFileName = data.FullFileName;
original.IsExists = data.IsExists;
original.IsReadOnly = data.IsReadOnly;
original.Length = data.Length;
UpdateObject(original);
SaveChanges();
}
}
{
private const string ENTITY_NAME = "imageentity";
public ImageContext(string baseAddress, StorageCredentials credentials)
: base(baseAddress, credentials)
{
CloudTableClient.CreateTablesFromModel(typeof(ImageContext), baseAddress, credentials);
}
public IQueryable<ImageEntity> ImageEntity
{
get { return CreateQuery<ImageEntity>(ENTITY_NAME); }
}
/// <summary>
/// Add object to table
/// </summary>
/// <param name="data">ImageEntity object to add</param>
public void Add(ImageEntity data)
{
AddObject(ENTITY_NAME, data);
SaveChanges();
}
/// <summary>
/// Update object
/// </summary>
/// <param name="original">Original ImageEntity object</param>
/// <param name="data">Updated object</param>
public void Update(ImageEntity original, ImageEntity data)
{
original.CreateTime = data.CreateTime;
original.CreatorName = data.CreatorName;
original.ExtendName = data.ExtendName;
original.FileName = data.FileName;
original.FileUri = data.FileUri;
original.FolderName = data.FolderName;
original.FullFileName = data.FullFileName;
original.IsExists = data.IsExists;
original.IsReadOnly = data.IsReadOnly;
original.Length = data.Length;
UpdateObject(original);
SaveChanges();
}
}
有关实体的类编写完成后,就对Table的操作的类(类名:StorageTable)代码进行编写,主要代码这里列出了对添加实体到Table的方法:
/// <summary>
/// Add object to table
/// </summary>
/// <param name="data">ImageEntity object to add</param>
public void Add(ImageEntity data)
{
Context.Add(data);
}
/// Add object to table
/// </summary>
/// <param name="data">ImageEntity object to add</param>
public void Add(ImageEntity data)
{
Context.Add(data);
}
这里的Context就是实体操作类的一个实例。
private ImageContext Context
{
get { return new ImageContext(Account.TableEndpoint.AbsoluteUri, Account.Credentials); }
}
{
get { return new ImageContext(Account.TableEndpoint.AbsoluteUri, Account.Credentials); }
}