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

1、核心PPT

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查询

查询,过滤,排序,扩展

继承

mutation

mutation结果查询

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

2021.NET Conf China上的GraphQL相关推荐

  1. 2021 .NET Conf China 主题分享之-轻松玩转.NET大规模版本升级

    去年.NET Conf China 技术大会上,我给大家分享了主题<轻松玩转.NET大规模版本升级>,今天把具体分享的内容整理成一篇博客,供大家研究参考学习. 一.先说一下技术挑战和业务背 ...

  2. 志愿者招募 | 2021 .NET Conf China

    回顾往届 .NET Conf China 活动 志愿者团队承担着非常重要的职责 参与到活动组织和安排过程的方方面面 志愿者的团队协作和专业素养 展示出了高度的凝聚力和号召力 无私付出和敬业得到了多方的 ...

  3. 讲师征集| .NET Conf China 2021正式启动!

    去年年初 疫情突袭武汉,打得我们措手不及 在众多 .NET 开发者们的殷切期盼声中 一场轰动极客圈的技术狂欢趴 毅然在苏州盛大开启.圆满落幕! 我们坚信,你还记忆犹新-- ▽ 因为,TA 是 .NET ...

  4. 福利好礼现金大奖等你来→首届 .NET Conf China Hackathon 火热报名中!

    .NET 开源以来越来越多的开发者和企业开始加入到 .NET 的生态..NET 6 是 .NET Framework,  .NET Core 和 Mono 三个平台完成融合的第一个长期支持版本,无论你 ...

  5. .NET Conf China 2022 第一批讲师阵容大揭秘!整个期待了!

    目光看过来 2022年12月3-4日 一场社区性质的国内规模最大的 线上线下.NET Conf 2022技术大会 即将盛大开幕 目前大会正紧锣密鼓地进行中 第一批大咖讲师及主题已确定 小编迫不及待想和 ...

  6. .NET Conf China 2020志愿者招募火热开启!还有神秘惊喜等你来领…

    距.NET Conf China 2020 2020 中国 .NET 开发者大会 开幕还有14天 作为.NET的组织者之一 我们已经为这个活动准备铺垫了很久 但为了保证活动方方面面的质量 为了给现场& ...

  7. .NET Conf China 2022 圆满落幕,明年再见!

    时光飞快,还记得本月的第一个周末吗?12月3日-12月4日,相信对于 .NET 开发者来说一定记忆犹新!.NET Conf China 2022 于12月4日圆满落幕. 八方助力 共谱大会盛宴 .NE ...

  8. 苹果或在2021年新iPhone上增加屏下Touch ID

    1月16日消息,据外媒消息,苹果可能在2021年新iPhone上增加屏下Touch ID.今年新iPhone的变化不会太大,有可能是iPhone 12的"S"升级版. 消息人士还透 ...

  9. FACES纳新|2021春纳线上分享会等你来

    斯坦福中美学生论坛(FACES) 2021春季纳新线上分享会 强势来袭! 阅读这篇推文的你在想什么? 是在思考困扰已久的证明题吗 是在考虑专业方向的匹配度吗 是在鼓励自己勇敢作出决定吗 现在的你 或许 ...

最新文章

  1. CodeChef--EQUAKE
  2. Tkinter中常用的函数
  3. android自定义组件属性,android自定义控件并添加属性的方法以及示例
  4. 在OSI参考模型中,当两台计算机进行文件传输时,为防止中间出现网络故障而重传整个文件的情况,可通过在文件中插入同步点来解决,这个动作发生在( )
  5. vi常用命令与设置(不断修改中)
  6. 天池 在线编程 双向取数(博弈DP)
  7. 低格硬盘用什么软件_迟来的评测:用了三年后的固态硬盘会变成什么样呢?
  8. linux系统优化配置
  9. 依托大数据的财务管理新路径
  10. django图片上传到oss_从攻防角度看oss安全(二)
  11. C# OCR 文字识别
  12. 计算机专业的学生也太太太太太惨了吧?
  13. Android 自定义锁屏 监听系统消息推送
  14. 软件架构设计-大型网站技术架构于业务架构融合之道——部分知识点总结【未完】
  15. 低代码、高敏捷的智和网管平台,运维平台二次开发极简化
  16. Android内存管理优化建议
  17. 安全人员常用的python库
  18. 【1】GAN在医学图像上的生成,今如何?
  19. ie8与ie9的区别
  20. 带你一文通透CAN总线相关知识

热门文章

  1. 深度优先搜索——八皇后问题
  2. MCGS与PLC通讯不上
  3. Rails IDE 有很多选择,但是具体到ubuntu 64bit 选择的余地就不多了,这里选择Aptana Studio 3 Beta...
  4. 老布特木糖醇蛋卷鸡蛋味
  5. vb趣味编程弹球小游戏_最好玩的微信小游戏集合,总有一款是你没玩过的
  6. 帆软报表(finereport)table块钻取,返回记住table块位置
  7. Maven学习笔记(2) --mvn archetype:create 说明
  8. PAT-乙级-1042 字符统计
  9. 在FC中如何获取fcdot文件
  10. python3-day4(装饰器)