Windows Azure系列-- Azure Table的CRUD操作

1. 首先还是按照Azure Storage 的Pkg:

2. 可以下载AzureStorage Explorer 来管理Azure Storage的状态
https://azurestorageexplorer.codeplex.com/

如果是有很多文件要上传到BLOB,建议使用CloudBerry的Azure版本。

测试实体类:

public class Student : TableEntity
    {
        public Student()
        {

        }
        public Student(string id, string name, DateTime joinedDate, bool hasGraduated)
        {
            Id = id;
            Name = name;
            JoinDate = joinedDate;
            HasGraduated = hasGraduated.ToString();

            RowKey = id;
            PartitionKey = id;
        }
        public string Id { get; set; }
        public string Name { get; set; }
        public DateTime JoinDate { get; set; }

        public string HasGraduated { get; set; }
    }

需要注意的地方就是要继承自TableEntity.

StorageAccount属性:

private static CloudStorageAccount StorageAccount
        {
            get
            {
                var creds = new StorageCredentials(AccountName, Key);
                var account = new CloudStorageAccount(creds, useHttps: true);
                return account;
            }
        }

AccountName与Key需要替换为你自己的。

1. 创建表(TableName根据具体情形替换):

public static void CreateTableIfNotExsit()
        {
            CloudTableClient tableClient = StorageAccount.CreateCloudTableClient();

            // Create the table if it doesn‘t exist.
            CloudTable table = tableClient.GetTableReference(TableName);
            table.CreateIfNotExists();
        }

2. 插入记录

public static void Insert(Student s)
        {
            CloudTableClient tableClient = StorageAccount.CreateCloudTableClient();

            // Create the CloudTable object that represents the "student" table.
            CloudTable table = tableClient.GetTableReference(TableName);

            // Create the TableOperation that inserts the entity.
            TableOperation insertOperation = TableOperation.Insert(s);

            // Execute the insert operation.
            table.Execute(insertOperation);
        }

批量插入 - partitionKey需要一致(PartitionKey是优化查询用的,具体可以看这里: https://msdn.microsoft.com/en-us/library/azure/hh508997.aspx)

/// <summary>
        /// if want to insert in the same patch must have the same partition key
        /// </summary>
        /// <param name="students"></param>
        public static void Insert(IEnumerable<Student> students)
        {
            var tableClient = StorageAccount.CreateCloudTableClient();

            // Create the CloudTable object that represents the "student" table.
            var table = tableClient.GetTableReference(TableName);

            // Create the batch operation.
            var batchOperation = new TableBatchOperation();

            // Add both entities to the batch insert operation.
            foreach (var s in students)
            {
                batchOperation.Insert(s);
            }

            // Execute the batch operation.
            table.ExecuteBatch(batchOperation);
        }

查询

public static IEnumerable<Student> GetByName(string name)
        {
            var tableClient = StorageAccount.CreateCloudTableClient();

            var table = tableClient.GetTableReference(TableName);

            var query = new TableQuery<Student>().Where(TableQuery.GenerateFilterCondition("Name", QueryComparisons.Equal, name));
            foreach (Student entity in table.ExecuteQuery(query))
            {
                yield return entity;
            }
        }

组合条件查询

public static IEnumerable<Student> GetGraduatedStudentsByName(string name, bool graduated)
        {
            var tableClient = StorageAccount.CreateCloudTableClient();

            //Create the CloudTable object that represents the "student" table.
            var table = tableClient.GetTableReference(TableName);

            // Create the table query.
            var rangeQuery = new TableQuery<Student>().Where(
                TableQuery.CombineFilters(
                    TableQuery.GenerateFilterCondition("Name", QueryComparisons.Equal, name),
                    TableOperators.And,
                    TableQuery.GenerateFilterCondition("HasGraduated", QueryComparisons.Equal,graduated ? "True" : "False"))
                    );

            // Loop through the results, displaying information about the entity.
            foreach (Student entity in table.ExecuteQuery(rangeQuery))
            {
                yield return entity;
            }
        }

获取单个记录

public static Student Single(string id)
        {
            CloudTableClient tableClient = StorageAccount.CreateCloudTableClient();

            // Create the CloudTable object that represents the "student" table.
            CloudTable table = tableClient.GetTableReference(TableName);

            TableOperation retrieveOperation = TableOperation.Retrieve<Student>(id, id);

            // Execute the retrieve operation.
            var ret = table.Execute(retrieveOperation);
            if (ret == null)
            {
                return null;
            }

            return (Student)ret.Result;
        }

修改记录

public static void Update(Student student)
        {
            var tableClient = StorageAccount.CreateCloudTableClient();

            // Create the CloudTable object that represents the table.
            var table = tableClient.GetTableReference(TableName);

            // Create a retrieve operation that takes a entity.
            var retrieveOperation = TableOperation.Retrieve<Student>(student.Id, student.Id);

            // Execute the operation.
            var retrievedResult = table.Execute(retrieveOperation);

            // Assign the result to a object.
            var updateEntity = (Student)retrievedResult.Result;

            if (updateEntity != null)
            {
                updateEntity.Name = student.Name;
                updateEntity.JoinDate = student.JoinDate;
                updateEntity.HasGraduated = student.HasGraduated;

                var updateOperation = TableOperation.Replace(updateEntity);

                // Execute the operation.
                table.Execute(updateOperation);
            }
        }

删除记录

public static void Delete(string id)
        {
            var tableClient = StorageAccount.CreateCloudTableClient();

            var table = tableClient.GetTableReference(TableName);

            var retrieveOperation = TableOperation.Retrieve<Student>(id,id);

            var retrievedResult = table.Execute(retrieveOperation);

            var deleteEntity = (Student)retrievedResult.Result;

            // Create the Delete TableOperation.
            if (deleteEntity != null)
            {
                var deleteOperation = TableOperation.Delete(deleteEntity);

                // Execute the operation.
                table.Execute(deleteOperation);
            }
        }

本文只是为了演示AzureTable的CRUD操作,在具体场景中,不应该使用静态方法,应该是对象。

完整的测试代码:

[TestMethod]
        public void AzureTable_CRUD_Test()
        {
            AzureTableCRUD.CreateTableIfNotExsit();

            AzureTableCRUD.Insert(new Student("1", "StuA", DateTime.Parse("2015-3-11 12:00:00 PM"), false));
            AzureTableCRUD.Insert(new Student("2", "StuB", DateTime.Parse("2015-3-11 12:00:00 PM"), false));
            AzureTableCRUD.Insert(new Student("3", "StuB", DateTime.Parse("2015-3-11 12:00:00 PM"), false));
            AzureTableCRUD.Insert(new Student("4", "Gra_Stu_A", DateTime.Parse("2011-3-11 12:00:00 PM"), true));
            AzureTableCRUD.Insert(new Student("5", "Gra_Stu_A", DateTime.Parse("2011-3-11 12:00:00 PM"), true));

            // - get many
            var stu = AzureTableCRUD.GetByName("StuB").ToList();
            Assert.IsTrue(stu.Count == 2);
            Assert.IsTrue(stu[0].Name == "StuB");
            Assert.IsTrue(stu[1].Name == "StuB");

            // - get single
            var stuA = AzureTableCRUD.Single("1");
            Assert.IsTrue(stuA.Name == "StuA");

            // - combine condition get many
            var graduates = AzureTableCRUD.GetGraduatedStudentsByName("Gra_Stu_A", true).ToList();
            Assert.IsTrue(graduates.Count == 2);
            Assert.IsTrue(graduates[0].Id == "4");
            Assert.IsTrue(graduates[1].Id == "5");

            AzureTableCRUD.Update(new Student("2","StuB_Modified",DateTime.Parse("2015-4-11 12:00:00"),false ));
            var stuB = AzureTableCRUD.Single("2");
            Assert.IsTrue(stuB.Name == "StuB_Modified");
            Assert.IsTrue(stuB.JoinDate.Month == 4);

            AzureTableCRUD.Delete("4");
            var tryGetForth = AzureTableCRUD.Single("4");
            Assert.IsNull(tryGetForth);
        }

在Azure Explorer中查看结果:

时间: 2024-10-01 12:41:39

Windows Azure系列-- Azure Table的CRUD操作的相关文章

Windows Azure 系列-- Azure Queue的操作

- Storage Account, 和之前介绍的Azure Table和AzureBlob一样,你需要一个StorageAccount,只需要创建1次AzureStorageAccount就好了,它们3个是共享的. 创建好之后,就可以使用以下属性来访问Azure的Storage了: private static CloudStorageAccount StorageAccount { get { var creds = new StorageCredentials(AccountName, K

Windows Azure 系列-- Azure Redis Cache的配置和使用

如果还没有配置Azure Power shell 可以参照这里进行配置:http://blog.csdn.net/lan_liang/article/details/46850221 打开Azure Power Shell 1. 运行 Add-AzureAccount (如果已经添加就不用了) 2. 运行 New-AzureManagedCache -Name mycache -Location "South Central US" -Sku Basic -Memory 128MB 进

Windows Azure系列 -《基础篇》- 如何创建虚拟机

首先,使用自己的windows azure账号登陆管理平台manage.windowsazure.cn,找到并点击"虚拟机"标签,即可看到目前云平台中你所拥有的虚机实例,在我的环境中现在没有任何的虚机,所以我们可以通过点击图示的新建按钮进行选择或直接点击"创建虚拟机"进行创建: 点击"创建虚拟机",在DNS名称位置填写所建虚机的主机名,并选择映像和虚机大小(可选单核至8核,内存从768M至56G),这里说明一下,处于用户名不可以设置为常用的adm

Windows Azure系列 -《基础篇》- 创建虚拟网络

如何在Windows Azure中创建虚拟网络,以构建云环境中的虚拟局域网: 1.登陆Windows Azure平台,点击侧边栏网络按钮,在中间点击"创建虚拟网络". 2.在接下来的配置页面,填写虚拟网络的名称.选择地理外置和地缘组(如果已有),没有则选择创建新的地缘组. 3.接下来填写DNS服务器地址(没有则留空) 4.规划和配置IP网络,选择适用的地址空间. 5.最后点击确认按钮完成. Windows Azure系列 -<基础篇>- 创建虚拟网络,布布扣,bubuko.

Windows Azure系列 -《基础篇》- 存储

打开windows azure管理门户,点击下方的"新建", 定义一个存储名称,并设定好地缘组和位置,冗余的方式可以是地域之间的冗余,也可以是本地区域内的冗余,可以根据自己的实际情况选择. 目前windows azure在中国有两个数据中心可供选择,以托管订阅的虚机,建议选择离自己所在地位置更近一点的,访问效率会比较高. 设置完后,点击创建存储账号,既可以完成存储账号的创建工作. 在列表中我们可以看到创建的过程及状态, 通过点击所创建的存储,可以查看它的状态和修改存储配置, 在配置标签

Windows Azure系列 -《基础篇》- 基本设置

打开Windows Azure管理门户,在左侧边栏点击设置,展开设置页面 在这个页面中,我们可以看到你所拥有的订阅的信息和管理信息等. 这里简单说一下各项内容: 1. 订阅 订阅部分显示你目前账号所拥有的订阅信息以及管理帐户,如果你有多个订阅并绑定在一起,那么它将显示你所有的订阅信息. 2. 管理证书 在管理证书页面,我们可以管理用于windows azure的证书,点上传以便将证书导入windows azure. 3. 管理员 在windows azure中,如果需要有多个管理人员,我们可以在

Windows Azure系列 -《基础篇》- 计划程序

打开Windows Azure管理门户,在左侧边栏点击设置,展开计划程序页面,我们可以看到目前的作业情况: 在计划程序中,我们可以做的就是定制特定管理作业,并查看以往作业的执行情况. 点击作业集合,然后点击创建计划程序作业,即可创建你自己的作业, 在接下来的页面选择快速创建,填写作业名称并选择区域,点击下一步 在作业页面,填写作业的相关信息,包括名称.类型.方法等 确认重复周期和启动时间即可. 接下来就可以看到作业集合的状态, 以及可以查看各作业的执行情况,通过筛选可以有选择的查看所要关注的作业

Azure 基础:Table storage

Azure Storage 是微软 Azure 云提供的云端存储解决方案,当前支持的存储类型有 Blob.Queue.File 和 Table.其中的 Table 就是本文的主角 Azure Table storage. Azure Table storage 是一个在云端存储结构化 NoSQL 数据的服务.它不仅存取速度快,而且效费比高.MSDN 上的说法是:成本显著低于传统 SQL!笔者最近在项目中用 Table storage 实现了一个日志表,在此和大家分享一下 Table storag

初码-Azure系列-迁移PHP应用至Azure的一些实践记录和思考

最近客户在逐步迁移应用从阿里云到Azure,这次又轮到一个PHP+MySQL应用了,顺便也记一下流水账. 需求:迁移部署在阿里云上的ECS服务器(系列2,IO优化+2核4G+50G的SSD云盘+10M带宽+Server 2012 R2+安装在操作系统上的MySQL数据库[版本不详])到Azure上 最终的方案简易描述如下: 1.使用Azure虚拟机替代ECS服务器,使用MySQL Database on Azure替代本地MySQL 2.从Server 2012 R2操作系统升级到Windows