当前位置: 首页 > news >正文

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中查看结果:



相关文章:

  • [IE编程] 如何获得IE版本号
  • Windows Azure 系列-- Azure Queue的操作
  • Build the Hack CPU with Verilog
  • 使用Service Bus Topic 实现简单的聊天室
  • 使用Service Bus + SignalR 实现聊天室
  • 中移动OMS系统展望..
  • Asp.net MVC4 + signalR 聊天室实现
  • JSF的国际化
  • javascript 替换浏览器Tab的title实现消息通知提示
  • 很好很强大 中移动OMS开源操作系统使用感想
  • [Windows编程] 获取系统CPU 个数
  • 算法练习之DP 求LCM (最长公共子序列)
  • C#中的特性Attribute
  • 算法练习 -- DP 查找和为指定数字的数组
  • 2009英雄会后记:最出彩是创业 最关注是产品 最可惜是创富
  • 【个人向】《HTTP图解》阅后小结
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • Android优雅地处理按钮重复点击
  • conda常用的命令
  • JavaScript的使用你知道几种?(上)
  • node.js
  • vuex 笔记整理
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 搭建gitbook 和 访问权限认证
  • 二维平面内的碰撞检测【一】
  • 分享一份非常强势的Android面试题
  • ------- 计算机网络基础
  • 设计模式(12)迭代器模式(讲解+应用)
  • 数组大概知多少
  • 微信开放平台全网发布【失败】的几点排查方法
  • 我这样减少了26.5M Java内存!
  • 用Canvas画一棵二叉树
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • #1015 : KMP算法
  • (12)Hive调优——count distinct去重优化
  • (AngularJS)Angular 控制器之间通信初探
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (一)VirtualBox安装增强功能
  • (转)母版页和相对路径
  • .bashrc在哪里,alias妙用
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .net core 6 集成和使用 mongodb
  • .NET CORE Aws S3 使用
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .Net IOC框架入门之一 Unity
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成
  • [ solr入门 ] - 利用solrJ进行检索
  • [2015][note]基于薄向列液晶层的可调谐THz fishnet超材料快速开关——
  • [383] 赎金信 js