Azure Cosmos DB (二) SQL API 操作
一,引言
还记得国庆期间,我们学习了一下关于Azure Cosmos DB 的一些基础知识以及Azure Cosmos DB 的几种支持数据库类型。今天就开始分享一些实战操作,如何通过Azure Portal 创建 Cosmos DB,以及在实际项目中如何通过代码操作数据库。
今天要演示的是 Core(SQL) 核心,SQL API 是具有丰富的SQL查询功能的无架构 JSON 数据库引擎,它是以 json 形式的文档数据库。同时微软提供了对应的 EF 的操作包 ----- Microsoft.EntityFrameworkCore.Cosmos,使得我们很轻松的使用原有EF操作数据库的模式进行操作 Cosmos DB。
注意这里使用的 Microsoft.EntityFrameworkCore.Cosmos 仅适用于 Azure Cosmos DB 的 SQL API
--------------------我是分割线--------------------
1,Azure Cosmos DB (一) 入门介绍
2,Azure Cosmos DB (二) SQL API 操作
二,正文
1, 创建Azure Cosmos DB
在Azure portal 中点击 “+ 创建资源”,在搜索框中输入 “Azure Cosmos DB” 进行搜索
点击 “Create” ,进行开始创建
Resource Group:"Web_Test_DB_RG"
Account Name:"cnbateblogwebcosmosdb"
API 选择:Core(SQL)
Capacity mode 选择默认 :“Provisioned throughtput”(预配的吞吐量)
其他都选择默认。点击 “Review + create” 进行创建前的预校验。
使用Azure Cosmos DB 免费层时,将在账户中免费获得 400 RU/秒和 5GB 的存储。每个订阅最多可对一个账户启用免费层。预计每个账户每月有24美元的折扣。
可以看到验证提示 “Validation Sucess”,点击 ”Create“ 进行创建
等待几分钟后,我们可以在 "Web_Test_DB_RG" 中找到刚刚创建好的叫 ”cnbateblogwebcosmosdb“ 的 Cosmos DB 了
点击进去,找到 Data Explorer ,点击 ”New Database“ 新建数据库
或者点击 ”New Container“ 旁边的小箭头,进行下拉选择创建新的数据库。
Database id:”CNBATEBLOGWEB“
点击 “OK” ,进行创建
可以看到 “CNBATEBLOGWEB” 的 Database 已创建好了。
2,项目添加对Cosmos DB 的依赖包
2.1,安装 “Microsoft.EntityFrameworkCore”,“Microsoft.EntityFrameworkCore.Cosmos”
使用程序包管理控制台进行安装
Install-Package Microsoft.EntityFrameworkCore -Version 3.1.8
Install-Package Microsoft.EntityFrameworkCore.Cosmos -Version 3.1.8
2.2,要创建所需的容器并插入种子数据
配置环境,此时需要cosmosDB 的 Endpoint,Key,DatabaseName
图中对应的 URL=》Endpoint,PRIMARK KEY=》Key,
上面步骤中创建的叫 “CNBATEBLOGWEB” 的我们需要的DatabaseName
整理好刚才需要的三个参数,添加到项目的配置文件中 也就是 appsettings.json 文件中
创建UserModel 实体,UserContext,重写 OnConfiguring 方法,调用UseCosmos 方法
重写 “OnModelCreating” 创建数据数据映射关系
”ConfigrueServices“ 中添加对 “UserContext” 的依赖注入
生产种子数据,先将已有的数据库进行删除操作,再进行添加操作以及生成种子数据
完整代码
1 public class UserContext : DbContext
2 {
3 public UserContext(DbContextOptions<UserContext> options) : base(options)
4 {
5
6 }
7
8 public DbSet<UserModel> Users { get; set; }
9
10 /// <summary>
11 /// 重写连接数据库
12 /// </summary>
13 /// <param name="optionsBuilder"></param>
14 protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
15 {
16 // 从 appsetting.json 中获取配置信息
17 var config = new ConfigurationBuilder()
18 .SetBasePath(Directory.GetCurrentDirectory())
19 .AddJsonFile("appsettings.json")
20 .Build();
21
22 // 定义要使用的数据库
23 optionsBuilder.UseCosmos(Appsettings.app("CosmosDB", "Endpoint"), Appsettings.app("CosmosDB", "Key"), Appsettings.app("CosmosDB", "DataBase"));
24 }
25
26 protected override void OnModelCreating(ModelBuilder modelBuilder)
27 {
28 //针对于HasData限制(即使主键是由数据库生成的自动增长),也需要指定主键
29
30 //调用EnsureCreated方法只针对与添加数据有效,但是数据库如果有数据的话,
31 //也就是对数据更改将无效
32 Console.WriteLine("**********UserModel表开始初始化数据**********");
33 #region 数据库数据映射
34 modelBuilder.Entity<UserModel>().HasData(
35 //new Blog{Id=1,Name="DDD领域驱动模型"},
36 new UserModel { Id = 1, Name = "EntityFramework Core 3.1.1" },
37 new UserModel { Id = 2, Name = "EntityFramework Core 3.1.6" });
38
39 #endregion
40
41
42 }
43
44 }
UserContext.cs
1 public class UserModel
2 {
3 public int Id { get; set; }
4
5 public string Name { get; set; }
6
7 public int Age { get; set; }
8
9 public string Address { get; set; }
10
11 public string Remark { get; set; }
12 }
UserModel.cs
1 /// <summary>
2 /// appsettings.json操作类
3 /// </summary>
4 public class Appsettings
5 {
6 static IConfiguration Configuration { get; set; }
7 static string contentPath { get; set; }
8
9 public Appsettings(string contentPath)
10 {
11 string Path = "appsettings.json";
12
13
14 //如果你把配置文件 是 根据环境变量来分开了,可以这样写
15 //string Path = $"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json";
16
17 //var contentPath = env.ContentRootPath;
18 Configuration = new ConfigurationBuilder()
19 .SetBasePath(contentPath)
20 .Add(new JsonConfigurationSource { Path = Path, Optional = false, ReloadOnChange = true })//这样的话,可以直接读目录里的json文件,而不是 bin 文件夹下的,所以不用修改复制属性
21 .Build();
22 }
23
24 /// <summary>
25 /// 封装要操作的字符
26 /// </summary>
27 /// <param name="sections"></param>
28 /// <returns></returns>
29 public static string app(params string[] sections)
30 {
31 try
32 {
33 var val = string.Empty;
34 for (int i = 0; i < sections.Length; i++)
35 {
36 val += sections[i] + ":";
37 }
38
39 return Configuration[val.TrimEnd(':')];
40 }
41 catch (Exception)
42 {
43 return "";
44 }
45 }
46 }
Appsettings.json
1 public class Program
2 {
3 public static void Main(string[] args)
4 {
5 var host = CreateHostBuilder(args).Build();
6 // 创建可用于解析作用域服务的新 Microsoft.Extensions.DependencyInjection.IServiceScope。
7 using (var scope = host.Services.CreateScope())
8 {
9 var services = scope.ServiceProvider;
10 var loggerFactory = services.GetRequiredService<ILoggerFactory>();
11 var env = services.GetRequiredService<IWebHostEnvironment>();
12 if (env.IsDevelopment())
13 {
14 try
15 {
16 // 从 system.IServicec提供程序获取 T 类型的服务。
17 var context = services.GetRequiredService<UserContext>();
18
19 context.Database.EnsureDeleted();
20 Console.WriteLine("**********开始初始化数据**********");
21 context.Database.EnsureCreated();
22
23 }
24 catch (Exception e)
25 {
26 var logger = loggerFactory.CreateLogger<Program>();
27 logger.LogError(e, "Error occured seeding the Database.");
28 }
29 }
30 }
31
32 // 运行 web 应用程序并阻止调用线程, 直到主机关闭。
33 // 创建完 WebHost 之后,便调用它的 Run 方法,而 Run 方法会去调用 WebHost 的 StartAsync 方法
34 // 将Initialize方法创建的Application管道传入以供处理消息
35 // 执行HostedServiceExecutor.StartAsync方法
36
37 host.Run();
38 }
39
40 public static IHostBuilder CreateHostBuilder(string[] args) =>
41 Host.CreateDefaultBuilder(args)
42 .ConfigureWebHostDefaults(webBuilder =>
43 {
44 webBuilder
45 .UseUrls("http://*:9001")
46 .UseStartup<Startup>();
47 });
48 }
Program.cs
1 public class Startup
2 {
3 public Startup(IConfiguration configuration, IWebHostEnvironment env)
4 {
5 Env = env;
6 Configuration = configuration;
7 }
8
9 public IConfiguration Configuration { get; }
10
11 public IWebHostEnvironment Env { get; }
12
13 // This method gets called by the runtime. Use this method to add services to the container.
14 public void ConfigureServices(IServiceCollection services)
15 {
16 services.AddSingleton(new Appsettings(Env.ContentRootPath));
17
18 services.AddDbContext<UserContext>(options => options.UseCosmos(Appsettings.app("CosmosDB", "Endpoint"), Appsettings.app("CosmosDB", "Key"), Appsettings.app("CosmosDB", "DataBase")));
19
20 services.AddControllersWithViews();
21 }
22
23 // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
24 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
25 {
26 if (env.IsDevelopment())
27 {
28 app.UseDeveloperExceptionPage();
29 }
30 else
31 {
32 app.UseExceptionHandler("/Home/Error");
33 }
34 app.UseStaticFiles();
35
36 app.UseRouting();
37
38 app.UseAuthorization();
39
40 app.UseEndpoints(endpoints =>
41 {
42 endpoints.MapControllerRoute(
43 name: "default",
44 pattern: "{controller=Home}/{action=Index}/{id?}");
45 });
46 }
47 }
Startup.cs
3,运行项目,查看测试结果
我们可以看到UserModel 表已初始化数据完成
我们转到Azure Portal 上查看 "CNBATEBLOGWEB" 数据库下多了叫 “UserContext” 的 Container 这里的可以理解成存放表的容器
同时,我们可以看到 ”UserContext“ 下的 Item 多了两条 Usermodel 数据,我们分别进行查看,可以看到这两条数据就是刚刚生成的种子数据
ok,今天的分享就到此,撒花是
-------------------我是分割线-------------------
本来我想尝试直接可以通过VS 的 Cloud Explorer 进行查看 cosmosDB 中的数据,但是无奈每当点击 Container 下的更多的时候,VS 就进行报错
有知道怎么解决这个问题的朋友,还望告知一下。
三,结尾
今天我们先操作这么多,简单的使用 EF 对 Azure Cosmos DB 进程操作,生产种子数据,以及如何查看生成好的种子数据,下一篇继续讲解使用 EF 来操作操作Azure CosmosDB,并且对其中的数据库中的数据如何做增加,删除,修改,查询等操作。
github:https://github.com/yunqian44/Azure.CosmosDB.git
作者:Allen
版权:转载请在文章明显位置注明作者及出处。如发现错误,欢迎批评指正。
Azure Cosmos DB (二) SQL API 操作的更多相关文章
- Azure Cosmos DB (三) EF Core 操作CURD
一,引言 接着上一篇使用 EF Core 操作 Azure CosmosDB 生成种子数据,今天我们完成通过 EF Core 实现CRUD一系列功能.EF Core 3.0 提供了CosmosDB 数 ...
- Azure Cosmos DB (四) 使用EF的SQL API 异地冗余
一,引言 上一篇文章中,我们介绍到使用了EF Core 与Cosmos DB SQL API 进行结合开发.同时,大家在开发过程中一定要记得EF Core 不支持Cosmos DB 的迁移.今天我们启 ...
- Azure Cosmos DB (五) .Net Core 控制台应用
一,引言 之前在讲Azure CosmosDB Core(SQL)核心的时候,使用了EF Core 的方式,引用了 "Microsoft.EntityFrameworkCore.Cosmos ...
- Azure Cosmos DB (一) 入门介绍
一,引言 今天是国庆.中秋双节房价的第三天,今天抽时间分享一篇关于使用Azure 提供的一项NoSql 服务-----Azure Cosmos DB.就有人问了,我听说过 MongoDB.Redis ...
- NCF 的Azure Cosmos DB 演示案例
简介 NCF想必看过我之前发的NCF的文章的同学们都已经很熟悉了 今天我们要来聊一聊的是NCF遇到Azure Cosmos DB后会碰撞出什么样的火花,让我们一起往下看 我们先来说说什么是Azure ...
- Azure Cosmos DB 使用费用参考
之前在学习Cosmos DB 中SQL API(DocumentDB) 的时候,也就是之前做的一些笔记,看到有使用费用的一些介绍,就有兴趣的去了解了下,做了一下简单的总结. 想了解更多或是购买使用的还 ...
- Azure Cosmos DB介绍及演示
Azure Cosmos DB 是 Microsoft 提供的全球分布式多模型数据库服务.Cosmos DB是一种NoSql数据库,但是它兼容多种API.它支持SQL, MongoDB.Cassand ...
- Azure CosmosDB (10) Azure Cosmos DB体系结构
<Windows Azure Platform 系列文章目录> Azure Cosmos DB的体系结构分为以下几个部分: 1.Database Accounts Database Acc ...
- azure cosmos db (mongo DB)
使用.net mongo的操作类操作azure(微软云)cosmosdb时,发现在做delete的操作的时候可以传一个文档对象,但是最后这个文档会解析成具体的sql语句,而当文档特别大时这样就出先了转 ...
随机推荐
- 【平台开发】— 2.前端:vue-element-admin
前端我虽然没怎么写过,但也并不陌生.之前做web自动化,网页结构没少看,html,css,js也都断断续续了解过. 如果从空白开始写,肯定还是需要花不少时间的. 好在网上有了不少成熟的后台系统的前端脚 ...
- Educational Codeforces Round 68 (Rated for Div. 2)-C-From S To T
You are given three strings ss, tt and pp consisting of lowercase Latin letters. You may perform any ...
- JVM内存区域与垃圾回收
1.JAVA内存区域与内存溢出 1.1.概述 Java中JVM提供了内存管理机制,Java虚拟机在执行Java程序的过程中会把内分分为不同的数据区,如图: 1.2.程序计数器 程序计数器是当前线程所执 ...
- termux 进阶
直接正题. 1.优化键位: mkdir $HOME/.termux echo "extra-keys = [['ESC','/','-','HOME','UP','END','PGUP'], ...
- Oracle (实例名/服务名)SID和Service_Name的区别
可以简单的这样理解:一个公司比喻成一台服务器,数据库是这个公司中的一个部门.1.SID:一个数据库可以有多个实例(如RAC),SID是用来标识这个数据库内部每个实例的名字,就好像一个部门里,每个人都有 ...
- 仿VISIO连线
说明: 1.未实现障碍物自动避让功能: 2.未实现添加图元到连线之间,连线自动避开新增图元功能: 后续再完善... version 1: package com.sunsheen.jfids.stud ...
- blazemeter和jmeter
前言 咸鱼的生活总是那么短暂,年轻还是要多学习 blazemeter BlazeMeter是一款可以记录所有HTTP流量并在10分钟内创建一个负载测试并且与Apache JMeter兼容的chrome ...
- IIS实现Nginx功能:转发
这个标题本身是不合理的,但是基于目前公司有一份系统是外部代理商贴牌使用,有一个老的站点是部署在IIS上,好多代理商自己的域名绑定在这个上面,而近期新版本的系统已经上线,那么需要将这些域名也转发到新的站 ...
- memcached缓存:安装和清缓存
一.安装步骤: 1.将工具一直解压,解压到最底层的exe目录
- oracle之insert语句总结
insert语句总结 16.1 第一类,insert语句:单行插入 1)SQL> create table a (id int,name char(10) default 'aaa'); / ...