.net5 core Razor 进阶之二:EF Core基本数据操作介绍(2个表关联)
本篇介绍如何一次操作2个表,还是以 T_Student 和 T_Score 表为例。
场景一:如果客户端的页面是这样的,即提交的时候同时将学生信息和成绩信息提交过来,如下:
这时需要先写入学生表,然后再写入成绩表,新增操作的代码如下(使用事务):
public void OnPost() { //如果执行失败事务会自动回收,所以不需要显示执行 trans.Rollback(); using (IDbContextTransaction trans = _context.Database.BeginTransaction())//开启事务 { TStudent student = new TStudent { StuName = "雪宝", ClassCode = "4-1", ClassName = "四(1)班" }; _context.TStudents.Add(student);//新增学生 _context.SaveChanges(); //保存学生 TScore score = new TScore { ScoreId = 4,//为了演示,这里写死 StuId = student.StuId, //这里已经可以取到刚新增的学生编号 StuName = student.StuName, SubjectCode = "YUWEN", SubjectName = "语文", ExamScores = 86, ExamDate = DateTime.Now }; _context.TScores.Add(score);//新增成绩 _context.SaveChanges(); //保存成绩 trans.Commit(); //提交事务 } }
编译后执行,数据库值如下:
场景二:我们将场景一再演化一下,一次新增某个学生两科(语文、数学)成绩,画面如下:
提交的时候先保存学生表,然后将语文/数学成绩批量保存到成绩表,代码如下:
public void OnPost() { //如果执行失败事务会自动回收,所以不需要显示执行 trans.Rollback(); using (IDbContextTransaction trans = _context.Database.BeginTransaction())//开启事务 { TStudent student = new TStudent { StuName = "王子嘉", ClassCode = "4-1", ClassName = "四(1)班" }; _context.TStudents.Add(student); _context.SaveChanges(); //保存 TScore ywScore = new TScore { ScoreId = 5, StuId = student.StuId, StuName = student.StuName, SubjectCode = "YUWEN", SubjectName = "语文", ExamScores = 89, ExamDate = DateTime.Now }; TScore sxScore = new TScore { ScoreId = 6, StuId = student.StuId, StuName = student.StuName, SubjectCode = "SHUXUE", SubjectName = "数学", ExamScores = 97, ExamDate = DateTime.Now }; List<TScore> scoreList = new List<TScore>(); scoreList.Add(ywScore); scoreList.Add(sxScore); _context.TScores.AddRange(scoreList);//使用 AddRange() 批量新增,传入实体 List. _context.SaveChanges(); //保存 trans.Commit(); //提交事务 } }
编译后执行,结果如下:
场景三、直接执行SQL语句。
在某种情况下,如果使用EFCore框架提供的方法无法完成想要的效果,那就只能使出终极杀招了,方法如下:
public void OnGet() { _context.Database.ExecuteSqlRaw("UPDATE t_student SET class_name={0} WHERE stu_id={1}", "五(1)班", 1); }
调用 ExecuteSqlRaw() 方法去执行SQL, 编译后运行,效果如下:
执行前的数据:
执行后的数据:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人