2021.NET Conf China上的GraphQL

今天给大家分享.NET中的GraphQL,半个小时,没有把所有的代码敲出来,高估了自己的写码速度,所以通过这个文章分享出来。

1、核心PPT

90ed93bdfe992db5d837f115e9145e75.png

c1d9a8d94e68429eec24965fc8e9ded8.png

2、主要代码

using Conf2021GraphQL;
using Conf2021GraphQL.Models;
using Microsoft.EntityFrameworkCore;
using System.Security.Cryptography;var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddDbContext<ExamContext>(options =>options.UseSqlServer(builder.Configuration.GetConnectionString("ExamDatabase")));builder.Services.AddGraphQLServer().AddQueryType<Query>().AddTypeExtension<ExtendExamPaper>().AddInterfaceType<IDescribe>().AddType<SubjectTypeDescribe>().AddType<QuestionTypeDescribe>().AddMutationType<UserMutation>().AddProjections().AddFiltering().AddSorting();var app = builder.Build();
if (app.Environment.IsDevelopment())
{app.UseSwagger();app.UseSwaggerUI();
}
app.UseAuthorization();
app.MapControllers();app.MapGraphQL();app.Run();public class Query
{[Serial][UseProjection][UseFiltering][UseSorting]public IQueryable<ExamPaper> GetExamPapers([Service] ExamContext context) => context.ExamPapers;[Serial][UseProjection][UseFiltering][UseSorting]public IQueryable<User> GetUsers([Service] ExamContext context) => context.Users;[UseProjection][UseFiltering][UseSorting]public IQueryable<IDescribe> GetDescribes(){return new List<IDescribe>{new SubjectTypeDescribe{Describe ="问题科目类型"},new QuestionTypeDescribe{Describe ="试题类型 "},}.AsQueryable();}
}[ExtendObjectType(typeof(ExamPaper))]
public class ExtendExamPaper
{public int Count([Parent] ExamPaper paper) => paper.Questions.Count;
}public interface IDescribe
{string? Describe { get; set; }
}
public class SubjectTypeDescribe : IDescribe
{public string? Describe { get; set; }
}
public class QuestionTypeDescribe : IDescribe
{public string? Describe { get; set; }public string[] Types { get; set; } = new string[] { "单选题", "多选题", "判断题" };
}public class UserMutation
{public async Task<User> AddUser(User user, [Service] ExamContext context, CancellationToken cancellationToken){var password = GetRandomString(8);user.Password = System.Text.Encoding.UTF8.GetString(SHA256.HashData(System.Text.Encoding.UTF8.GetBytes(password + user.Salt)));await context.Users.AddAsync(user);await context.SaveChangesAsync(cancellationToken);user.Password = password;return user;}string GetRandomString(int length){string result = "";for (int i = 0; i < length; i++){char c = (char)new Random(Guid.NewGuid().GetHashCode()).Next(48, 123);result += c;}return result;}
}

3、GraphQL查询

查询,过滤,排序,扩展

67bd0817dfa1fad7f083fc517e73e11c.png

继承

0963f3f5c6194e45e8f4b56eb0a2b99b.png

mutation

36b76bdcee1c839bc2f359814ded0fd7.png

mutation结果查询

099ee9c2b3660a78b5ab88f6517ef6a2.png

4、githtub库:

https://github.com/axzxs2001/Conf2021GraphQL

5、数据库结构

USE [Exam]
GO
/****** Object:  Table [dbo].[Answers]    Script Date: 2021/12/18 23:36:00 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Answers]([ID] [int] IDENTITY(1,1) NOT NULL,[Sequre] [nvarchar](8) NOT NULL,[Answer] [nvarchar](200) NOT NULL,[IsTrue] [bit] NOT NULL,[QuestionID] [int] NOT NULL,CONSTRAINT [PK_Answers] PRIMARY KEY CLUSTERED 
([ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object:  Table [dbo].[ExamPaperQuestions]    Script Date: 2021/12/18 23:36:00 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[ExamPaperQuestions]([ExamPaperID] [int] NOT NULL,[QuestionID] [int] NOT NULL,CONSTRAINT [PK_ExamPaperQuestions_1] PRIMARY KEY CLUSTERED 
([ExamPaperID] ASC,[QuestionID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object:  Table [dbo].[ExamPapers]    Script Date: 2021/12/18 23:36:00 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[ExamPapers]([ID] [int] IDENTITY(1,1) NOT NULL,[Title] [nvarchar](200) NOT NULL,[Memo] [nvarchar](1000) NULL,[CreateTime] [datetime2](7) NOT NULL,CONSTRAINT [PK_ExamPapers] PRIMARY KEY CLUSTERED 
([ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object:  Table [dbo].[Questions]    Script Date: 2021/12/18 23:36:00 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Questions]([ID] [int] IDENTITY(1,1) NOT NULL,[Question] [nvarchar](300) NOT NULL,[Score] [float] NOT NULL,[QuestionTypeID] [int] NOT NULL,[SujectTypeID] [int] NOT NULL,CONSTRAINT [PK_Questions] PRIMARY KEY CLUSTERED 
([ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object:  Table [dbo].[QuestionTypes]    Script Date: 2021/12/18 23:36:00 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[QuestionTypes]([ID] [int] IDENTITY(1,1) NOT NULL,[TypeName] [nvarchar](50) NOT NULL,CONSTRAINT [PK_QuestionTypes] PRIMARY KEY CLUSTERED 
([ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object:  Table [dbo].[SubjectTypes]    Script Date: 2021/12/18 23:36:00 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[SubjectTypes]([ID] [int] IDENTITY(1,1) NOT NULL,[TypeName] [nvarchar](50) NOT NULL,CONSTRAINT [PK_SubjectTypes] PRIMARY KEY CLUSTERED 
([ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object:  Table [dbo].[UserExamAnswers]    Script Date: 2021/12/18 23:36:00 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[UserExamAnswers]([ID] [int] IDENTITY(1,1) NOT NULL,[UserExamID] [int] NOT NULL,[AnswerID] [int] NOT NULL,[CreateTime] [datetime] NOT NULL,CONSTRAINT [PK_UserExamAnswers] PRIMARY KEY CLUSTERED 
([ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object:  Table [dbo].[UserExams]    Script Date: 2021/12/18 23:36:00 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[UserExams]([ID] [int] IDENTITY(1,1) NOT NULL,[UserID] [int] NOT NULL,[ExamPapgerID] [int] NOT NULL,[BeginTime] [datetime] NOT NULL,[EndTime] [datetime] NOT NULL,CONSTRAINT [PK_UserExams] PRIMARY KEY CLUSTERED 
([ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object:  Table [dbo].[Users]    Script Date: 2021/12/18 23:36:00 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Users]([ID] [int] IDENTITY(1,1) NOT NULL,[UserName] [nvarchar](50) NOT NULL,[Password] [nvarchar](50) NOT NULL,[Salt] [nvarchar](50) NOT NULL,[Name] [nvarchar](50) NOT NULL,[Tel] [varchar](11) NULL,CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED 
([ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[ExamPapers] ADD  DEFAULT (getdate()) FOR [CreateTime]
GO
ALTER TABLE [dbo].[UserExamAnswers] ADD  DEFAULT (getdate()) FOR [CreateTime]
GO
ALTER TABLE [dbo].[Answers]  WITH CHECK ADD  CONSTRAINT [FK_Answers_Questions] FOREIGN KEY([QuestionID])
REFERENCES [dbo].[Questions] ([ID])
GO
ALTER TABLE [dbo].[Answers] CHECK CONSTRAINT [FK_Answers_Questions]
GO
ALTER TABLE [dbo].[ExamPaperQuestions]  WITH CHECK ADD  CONSTRAINT [FK_ExamPaperQuestions_ExamPapers] FOREIGN KEY([ExamPaperID])
REFERENCES [dbo].[ExamPapers] ([ID])
GO
ALTER TABLE [dbo].[ExamPaperQuestions] CHECK CONSTRAINT [FK_ExamPaperQuestions_ExamPapers]
GO
ALTER TABLE [dbo].[ExamPaperQuestions]  WITH CHECK ADD  CONSTRAINT [FK_ExamPaperQuestions_Questions] FOREIGN KEY([QuestionID])
REFERENCES [dbo].[Questions] ([ID])
GO
ALTER TABLE [dbo].[ExamPaperQuestions] CHECK CONSTRAINT [FK_ExamPaperQuestions_Questions]
GO
ALTER TABLE [dbo].[Questions]  WITH CHECK ADD  CONSTRAINT [FK_Questions_QuestionTypes] FOREIGN KEY([QuestionTypeID])
REFERENCES [dbo].[QuestionTypes] ([ID])
GO
ALTER TABLE [dbo].[Questions] CHECK CONSTRAINT [FK_Questions_QuestionTypes]
GO
ALTER TABLE [dbo].[Questions]  WITH CHECK ADD  CONSTRAINT [FK_Questions_SubjectTypes] FOREIGN KEY([SujectTypeID])
REFERENCES [dbo].[SubjectTypes] ([ID])
GO
ALTER TABLE [dbo].[Questions] CHECK CONSTRAINT [FK_Questions_SubjectTypes]
GO
ALTER TABLE [dbo].[UserExamAnswers]  WITH CHECK ADD  CONSTRAINT [FK_UserExamAnswers_Answers] FOREIGN KEY([AnswerID])
REFERENCES [dbo].[Answers] ([ID])
GO
ALTER TABLE [dbo].[UserExamAnswers] CHECK CONSTRAINT [FK_UserExamAnswers_Answers]
GO
ALTER TABLE [dbo].[UserExamAnswers]  WITH CHECK ADD  CONSTRAINT [FK_UserExamAnswers_UserExams] FOREIGN KEY([UserExamID])
REFERENCES [dbo].[UserExams] ([ID])
GO
ALTER TABLE [dbo].[UserExamAnswers] CHECK CONSTRAINT [FK_UserExamAnswers_UserExams]
GO
ALTER TABLE [dbo].[UserExams]  WITH CHECK ADD  CONSTRAINT [FK_UserExams_ExamPapers] FOREIGN KEY([ExamPapgerID])
REFERENCES [dbo].[ExamPapers] ([ID])
GO
ALTER TABLE [dbo].[UserExams] CHECK CONSTRAINT [FK_UserExams_ExamPapers]
GO
ALTER TABLE [dbo].[UserExams]  WITH CHECK ADD  CONSTRAINT [FK_UserExams_Users] FOREIGN KEY([UserID])
REFERENCES [dbo].[Users] ([ID])
GO
ALTER TABLE [dbo].[UserExams] CHECK CONSTRAINT [FK_UserExams_Users]
GO

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/293956.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyISAM和InnoDB的区别

mysql的存储引擎包括&#xff1a;MyISAM、InnoDB、BDB、MEMORY、MERGE、EXAMPLE、NDBCluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED等&#xff0c;其中InnoDB和BDB提供事务安全表&#xff0c;其他存储引擎都是非事务安全表。 最常使用的2种存储引擎:  1.Myisam是Mysql的默认存…

JavaScript中“javascript:void(0) ”是什么意思

来源&#xff1a; <a href"javascript:test();void(0);">here</a> 此处&#xff1a;Javascript中void是一个操作符&#xff0c;该操作符指定要计算一个表达式但是不返回值。 void 操作符用法格式如下&#xff1a;1. javascript:void (expression)2. java…

Android之6.0上的重要变化(二)

十、Android KeyStore变化 此版本上Android Keystore provider不再支持DSA,仍旧支持ECDSA。 锁屏密码在(如用户或设备管理器)禁用或重置的情况下,不需要加密部分将不再被删除,而加密部分则会被删除。 十一、Wi-Fi和网络变化(Wi-Fi and Networking Changes) 此版本…

Oracle常用语句

一、导出有条件数据: exp zh/mmsignon tables(tablename1) filed:\aa.dmp query\"where IDC8ECD78D123C42AEA64910C30325CEA7\" 二、修改字符集&#xff1a; a.查看字符集 select * from v$nls_parameters b.客户端:cmd下运行set NLS_LANGSIMPLIFIED CHINESE_CHINA.Z…

全国二级计算机理论知识,2021年度全国计算机等级考试二级MSOffice常考知识点基础知识部分.doc...

计算机发展、类型及其应用领域。计算机(computer)是一种能自动、高速进行大量算术运算和逻辑运算电子设备。 其特点为&#xff1a;速度快、精度高、存储容量大、通用性强、具备逻辑判断和自动控制能力。第一台计算机&#xff1a;ENIAC&#xff0c;美国&#xff0c;1946年 宾夕法…

Rust 社区求变,PHP 大旗不倒?

文 | 一君出品 | OSC开源社区&#xff08;ID&#xff1a;oschina2013&#xff09;上月底发生了两件开源语言相关的大事。一是 JetBrains 牵头成立 PHP 基金会&#xff0c;希望能确保语言的长寿和繁荣。二是 Rust 审核团队集体辞职&#xff0c;理由是 Rust 核心团队造成了“寡头…

Linux命令行编辑的快捷键

CtrlL&#xff0c;清屏CtrlR&#xff0c;搜索历史命令CtrlP&#xff0c;上一条历史命令CtrlN&#xff0c;下一条历史命令CtrlG&#xff0c;退出历史命令搜索模式CtrlA&#xff0c;光标移到行首CtrlE&#xff0c;光标移到行尾CtrlXX&#xff0c;光标在命令行首和行尾之间移动Ctr…

趣谈unicode,ansi,utf-8,unicode big endian这些编码有什么区别

从头讲讲编码的故事。那么就让我们找个草堆坐下&#xff0c;先抽口烟&#xff0c;看看夜晚天空上的银河&#xff0c;然后想一想要从哪里开始讲起。嗯&#xff0c;也许这样开始比较好…… 很久很久以前&#xff0c;有一群人&#xff0c;他们决定用8个可以开合的晶体管来组合成不…

centos安装vsftp后的虚拟用户设置

2019独角兽企业重金招聘Python工程师标准>>> 安装好vsftpd之后&#xff0c;有的时候需要配置虚拟用户&#xff0c;可以先写一个login.txt&#xff0c;奇数行为用户名&#xff0c;偶数为用户名密码&#xff0c;例如: user1 password1 user2 password2 然后将其生成文…

2021 .NET 开发者峰会顺利在网上落幕,线上直播回看汇总

.NET Conf China 2021 是面向开发人员的社区峰会&#xff0c;基于 .NET Conf 2021的活动&#xff0c;庆祝 .NET 6 的发布和回顾过去一年来 .NET 在中国的发展成果展示&#xff0c;它是由中国各地区的技术社区共同发起举办、知名企业和开源组织联合协办&#xff0c;是年度国内规…

html、css、js注释,js,html,css注释大集合

kmdjs和循环依赖循环依赖 循环依赖是非常必要的,有的程序写着写着就循环依赖了,可以提取出一个对象来共同依赖解决循环依赖,但是有时会破坏程序的逻辑自封闭和高内聚.所以没解决好循环依赖的模块化库.框架.编译器都不是一个好 ...Head First 设计模式之工厂模式(Factory Patter…

使用 HP 3PAR Peer Persistence 实现 vSphere Metro Storage Cluster (vMSC)

配置图示如下&#xff1a;测试结果方案HP 3PAR StoreServ Storage 系统行为VMware HA 行为单个阵列主机路径故障主机使用备用路径来维护卷访问。未观察到影响单个阵列节点故障主机使用站点上未出现故障的阵列节点的备用路径来维护卷访问。未观察到影响单个存储站点间链路故障无…

Android之解决aidl里面函数参数太大不能跨进程通信的问题

问题: 因为做的截屏拍照是跨进程通信的,所以需要用aidl,但是参数传递用的byte[] image,网上查了下aidl传递的基本参数类型,没有byte[], 然后把图片转化成String,结果时候接受得到有时候接受不到,不知道什么原因,然后其它传递参数又可以与服务端通信,后来推测,应该是aid…

java反射--注解的定义与运用以及权限拦截

自定义注解类编写的一些规则: 1. Annotation型定义为interface, 所有的Annotation会自动继承java.lang.Annotation这一接口,并且不能再去继承别的类或是接口. 2. 参数成员只能用public或默认(default)这两个访问权修饰 3. 参数成员只能用基本类型byte,short,char,int,long,floa…

微信公众平台消息接口开发(2)-封装weixin.class.php

微信公众平台消息接口开发&#xff08;2&#xff09;-封装weixin.class.php 一、封装weixin.class.php 由于微信公众平台的通信使用的是特定格式的XML数据&#xff0c;每次接受和回复都要去做一大堆的数据处理。 我们就考虑在这个基础上做一次封装&#xff0c;weixin.class.php…

这个外挂要上天了!教一千遍都不会的数理技巧,还不如搞懂最根本的概念!

▲ 点击查看数理化的学习对于很多孩子&#xff0c;包括家长都是一个大难题。比如&#xff0c;我们要教孩子认识动物&#xff0c;一般是要给孩子看动物的图片或实体&#xff0c;孩子自然就对这个动物有个认知。要教孩子数字&#xff0c;就会用一件玩具、两个苹果这种和现实有关联…

中科大量子计算机科学家,中国科学院量子信息重点实验室

报告时间&#xff1a;5月15日 周三 下午2:00报告地点&#xff1a;实验室一楼会议室报告人&#xff1a;武汉物理与数学研究所江开军研究员报告题目&#xff1a; Phase transition in a spin-orbital-angular-momentum coupled Bose-Einstein condensate报告摘要&#xff1a;Coup…

Android之如何解决部分手机拍照拍出来的照片是黑色

如何解决部分手机拍照拍出来的照片是黑色 最近项目做的是远程拍照和远程截屏的问题&#xff0c;远程截屏用的是Android 5.0之后的API&#xff0c;MediaPrejectionManger, 拍照用的是调用系统的camera&#xff0c;用的surfaceView进行预览&#xff0c;但是问题出现了&#xff0c…