第三步:
建立一个Message实体类。
与传统代码或由ORM工具生成的实体代码不同,它需要继承自TableStorageEntity.
public class Message : Microsoft.Samples.ServiceHosting.StorageClient.TableStorageEntity
{
public Message()
{
PartitionKey = "ChatRoom001";
//取实体时,默认排序是根据RowKey增序列
RowKey = (DateTime.MaxValue.Ticks - DateTime.Now.Ticks).ToString();
}
public string Name { get; set; }
public string Body { get; set; }
//不用定义“消息发布时间”这种字段了,
//因为Table Storage有一个自动时间戳属性TimeStamp可以自动记录数据更新时间。
}
{
public Message()
{
PartitionKey = "ChatRoom001";
//取实体时,默认排序是根据RowKey增序列
RowKey = (DateTime.MaxValue.Ticks - DateTime.Now.Ticks).ToString();
}
public string Name { get; set; }
public string Body { get; set; }
//不用定义“消息发布时间”这种字段了,
//因为Table Storage有一个自动时间戳属性TimeStamp可以自动记录数据更新时间。
}
第四步:
建立一个MessageDataServiceContext实体类。该类继承自TableStorageDataServiceContext,也就是间接继承自DataServiceContext。它的作用是获得一个对数据服务上下文的引用。此外,定义一个公共属性Messages:可返回所有Message类型实体; 增加AddMessage方法:将Message实体存入Table Storage。
public class MessageDataServiceContext : TableStorageDataServiceContext
{
public MessageDataServiceContext(StorageAccountInfo accountInfo)
: base(accountInfo)
{
}
//定义公共属性Messages,返回所有数据服务上下文中的Message类实体。
public IQueryable<Message> Messages
{
get
{
return this.CreateQuery<Message>("Messages");
}
}
public void AddMessage(string name, string body)
{
//使用DataServiceContext类提供的AddObject方法来存入实体
this.AddObject("Messages", new Message { Name = name, Body = body });
//DataServiceContext类提供的SaveChanges()方法来保存修改
this.SaveChanges();
}
}
{
public MessageDataServiceContext(StorageAccountInfo accountInfo)
: base(accountInfo)
{
}
//定义公共属性Messages,返回所有数据服务上下文中的Message类实体。
public IQueryable<Message> Messages
{
get
{
return this.CreateQuery<Message>("Messages");
}
}
public void AddMessage(string name, string body)
{
//使用DataServiceContext类提供的AddObject方法来存入实体
this.AddObject("Messages", new Message { Name = name, Body = body });
//DataServiceContext类提供的SaveChanges()方法来保存修改
this.SaveChanges();
}
}
第五步:
取实体:
//初始化账户信息
StorageAccountInfo accountInfo = StorageAccountInfo.GetAccountInfoFromConfiguration("TableStorageEndpoint");
// 自动根据实体类的结构生成
TableTableStorage.CreateTablesFromModel(typeof(MessageDataServiceContext), accountInfo);
// 获取数据服务上下文的引用
MessageDataServiceContext context = new MessageDataServiceContext(accountInfo);
// 取前150条Message实体,作为数据源绑定到messageList中。
IQueryable<Message> data = context.Messages.Take(150);
this.messageList.DataSource = data;
this.messageList.DataBind();
StorageAccountInfo accountInfo = StorageAccountInfo.GetAccountInfoFromConfiguration("TableStorageEndpoint");
// 自动根据实体类的结构生成
TableTableStorage.CreateTablesFromModel(typeof(MessageDataServiceContext), accountInfo);
// 获取数据服务上下文的引用
MessageDataServiceContext context = new MessageDataServiceContext(accountInfo);
// 取前150条Message实体,作为数据源绑定到messageList中。
IQueryable<Message> data = context.Messages.Take(150);
this.messageList.DataSource = data;
this.messageList.DataBind();
存入实体:
protected void SubmitButton_Click(object sender, EventArgs e)
{
StorageAccountInfo accountInfo = StorageAccountInfo.GetAccountInfoFromConfiguration("TableStorageEndpoint");
MessageDataServiceContext context = new MessageDataServiceContext(accountInfo);
//调用刚才我们定义的AddMessage方法。其实如果你想看上去更爽的话,
//可以把这个方法的入参改为实体 :)
context.AddMessage(this.nameBox.Text, this.messageBox.Text);
}
{
StorageAccountInfo accountInfo = StorageAccountInfo.GetAccountInfoFromConfiguration("TableStorageEndpoint");
MessageDataServiceContext context = new MessageDataServiceContext(accountInfo);
//调用刚才我们定义的AddMessage方法。其实如果你想看上去更爽的话,
//可以把这个方法的入参改为实体 :)
context.AddMessage(this.nameBox.Text, this.messageBox.Text);
}
F5一下看看运行效果吧!
通过REST方法获得实体的真实相貌:
可以清楚地看到,这个实体有5个属性。其中有3个是默认必须有的属性,只有Body和Name是我们在实体类里自己定义的。