ASP.NET Podcast Show #133 - Windows Azure Table Storage - video
Subscribe to All!
Subscribe to WMV.
Subscribe to M4V (iPod).
Subscribe to MP3.
Download WMV .
Download M4V (iPod) .
Download MP3 .
Win a ticket to the MDC in Detroit. Enter here.
Original Url: http://aspnetpodcast.com/CS11/blogs/asp.net_podcast/archive/2008/12/25/asp-net-podcast-show-133-windows-azure-table-storage-video.aspx
Show Notes:
CRUD application. Message. Message Data Service Context. This example is taken from Hands On Labs. Source Code for Default.aspx.cs :
using System; using System.Collections; using System.Configuration; using System.Data; using System.Data.Services.Client; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; using Microsoft.Samples.ServiceHosting.StorageClient; using Microsoft.ServiceHosting.ServiceRuntime; namespace TableCloudService_WebRole { public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string statusMessage = String.Empty; if (!Page.IsPostBack) { DisplayMessages(); } } protected void lbDisplayMessages_Click(object sender, EventArgs e) { DisplayMessages(); } protected void OnDeleteMessage(object sender, CommandEventArgs e) { LinkButton lb = (LinkButton)sender; GridViewRow gvr = (GridViewRow)lb.Parent.Parent; if (e.CommandName == "Delete") { string PartitionKey = ((HiddenField)gvr.FindControl("hdPartitionKey")).Value; string RowKey = ((HiddenField)gvr.FindControl("hdRowKey")).Value; string TimeStamp = ((HiddenField)gvr.FindControl("hdTimeStamp")).Value; string Body = ((TextBox)gvr.FindControl("txtBody")).Text; string Name = ((TextBox)gvr.FindControl("txtName")).Text; MessageDataServiceContext context = GetContext(); //var m = (from mess in context.Messages // where // (mess.PartitionKey == PartitionKey) && // (mess.RowKey == RowKey) // select mess).Single(); var m = new Message(); m.PartitionKey = PartitionKey; m.RowKey = RowKey; m.Timestamp = Convert.ToDateTime(TimeStamp); context.AttachTo("Messages", m, "*"); context.DeleteMessage(m); RoleManager.WriteToLog("Verbose", "Delete Message."); DisplayMessages(); } } protected void OnUpdateMessage(Object sender, CommandEventArgs e) { LinkButton lb = (LinkButton)sender; GridViewRow gvr = (GridViewRow)lb.Parent.Parent; if (e.CommandName == "Update") { string PartitionKey = ((HiddenField)gvr.FindControl("hdPartitionKey")).Value; string RowKey = ((HiddenField)gvr.FindControl("hdRowKey")).Value; ; string TimeStamp = ((HiddenField)gvr.FindControl("hdTimeStamp")).Value; ; string Body = ((TextBox)gvr.FindControl("txtBody")).Text; ; string Name = ((TextBox)gvr.FindControl("txtName")).Text; ; MessageDataServiceContext context = GetContext(); //var m = (from mess in context.Messages // where // (mess.PartitionKey == PartitionKey) && // (mess.RowKey == RowKey) // select mess).First(); var m = new Message(); m.PartitionKey = PartitionKey; m.RowKey = RowKey; m.Timestamp = Convert.ToDateTime(TimeStamp); m.Body = Body; m.Name = Name; context.AttachTo("Messages", m, "*"); context.UpdateMessage(m); RoleManager.WriteToLog("Information", "Update complete."); DisplayMessages(); } } protected void Timer1_OnTick(Object sender, EventArgs e) { DisplayMessages(); } private void DisplayMessages() { MessageDataServiceContext context = GetContext(); RoleManager.WriteToLog("Verbose", "Display Messages."); messageList.DataSource = context.Messages.Take(10); messageList.DataBind(); } private MessageDataServiceContext GetContext() { MessageDataServiceContext context; StorageAccountInfo accountInfo = StorageAccountInfo.GetAccountInfoFromConfiguration("TableStorageEndpoint"); TableStorage.CreateTablesFromModel(typeof(MessageDataServiceContext), accountInfo); context = new MessageDataServiceContext(accountInfo); RoleManager.WriteToLog("Verbose", "Message Data Service Context created."); return context; } protected void SubmitButton_Click(object sender, EventArgs e) { StorageAccountInfo accountInfo = StorageAccountInfo.GetAccountInfoFromConfiguration("TableStorageEndpoint"); MessageDataServiceContext context = new MessageDataServiceContext(accountInfo); context.AddMessage(this.nameBox.Text, this.messageBox.Text); nameBox.Text = String.Empty; messageBox.Text = String.Empty; DisplayMessages(); } } }
Source Code for Default.aspx:
<%@
Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs"
Inherits="TableCloudService_WebRole._Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Azure Table Example Page</title> <style type="text/css"> body { font-family: Verdana; font-size: 9pt; } h1 { font-size: 12pt; color: #555555; } li { list-style-type: none; } form { background-color: #eeeeff; width: 80%; margin: 0 auto; padding: 1em; border: solid 1px #333333; } #entryform, #messages { margin: 1em 0 } #entryform li span { float: left; width: 15%; color:#333333; margin-top:0.25em; } #entryform input[type="text"] { border: solid 1px #999999; } #messages { border: solid 1px #999999; } #messages li { padding: 0.5em; } .error { color: #ff0000; } .even { background-color: #ccccff; } .odd { background-color: #ffffff; font-style: italic; } .messageBox { width: 73%; } </style> </head> <body> <form id="form1" runat="server"> <asp:ScriptManager ID="sm" runat="server" /> <div> <h1>Windows Azure Chat</h1> <ul id="entryform">
<li><span>Your name</span><asp:TextBox
ID="nameBox" runat="server" Text="Anonymous" /></li>
<li><span>Message</span><asp:TextBox
ID="messageBox" runat="server" CssClass="messageBox" />
<asp:Button ID="submitButton" runat="server" Text="Submit"
OnClick="SubmitButton_Click" /></li>
<li><span><asp:LinkButton ID="lbDisplayMessages"
runat="server" OnClick="lbDisplayMessages_Click" Text="Update Messages"
/></span></li> </ul> <div> <asp:Label ID="status" runat="server" CssClass="error" /> </div> <asp:GridView ID="messageList" runat="server" AutoGenerateColumns="false"> <AlternatingRowStyle CssClass="even" /> <RowStyle CssClass="odd" /> <Columns> <asp:TemplateField HeaderText="Name"> <ItemTemplate> <asp:HiddenField ID="hdPartitionKey" runat="server" Value='<%#Eval("PartitionKey") %>' /> <asp:HiddenField ID="hdRowKey" runat="server" Value='<%#Eval("RowKey") %>' /> <asp:HiddenField ID="hdTimeStamp" runat="server" Value='<%#Eval("TimeStamp") %>' /> <asp:HiddenField ID="hdName" runat="server" Value='<%#Eval("Name") %>' /> <asp:HiddenField ID="hdBody" runat="server" Value='<%#Eval("Body") %>' /> <asp:TextBox ID="txtName" runat="server" Text='<%# Eval("Name") %>' /> said: </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Message"> <ItemTemplate> <asp:TextBox ID="txtBody" runat="server" Text='<%# Eval("Body") %>' /> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Operations"> <ItemTemplate> <asp:LinkButton ID="updateMessage" CommandName="Update" runat="server" Text="Update" OnCommand="OnUpdateMessage" /> <asp:LinkButton ID="deleteMessage" OnClientClick="return confirm('Delete Message?');" CommandName="Delete" runat="server" Text="Delete" OnCommand="OnDeleteMessage" /> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> </div> </form> </body> </html>
Source for Message.cs:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using Microsoft.Samples.ServiceHosting.StorageClient; namespace TableCloudService_WebRole { public class Message : TableStorageEntity { //private string PartitionKey; //private string RowKey; public string Name { get; set; } public string Body { get; set; } public Message() { PartitionKey = "a"; RowKey = String.Format("{0:10},{1}", DateTime.MaxValue.Ticks - DateTime.Now.Ticks, Guid.NewGuid().ToString()); } } }
Source for MessageDataServiceContext.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.Samples.ServiceHosting.StorageClient;
namespace TableCloudService_WebRole
{
public class MessageDataServiceContext : TableStorageDataServiceContext
{
public MessageDataServiceContext(StorageAccountInfo accountInfo) : base(accountInfo)
{
}
public IQueryable<Message> Messages
{
get
{
return this.CreateQuery<Message>("Messages");
}
}
public void AddMessage(string name, string body)
{
Message MessageEntity = new Message { Name = name, Body = body };
this.AddObject("Messages", MessageEntity);
this.SaveChanges();
}
public void DeleteMessage(Object MessageEntity)
{
this.DeleteObject(MessageEntity);
this.SaveChanges();
}
public void UpdateMessage(Object MessageEntity)
{
this.UpdateObject(MessageEntity);
this.SaveChanges();
}
}
}