10分钟系列:NetCore3.1+EFCore三步快速完成数据库交互

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: 10分钟系列:NetCore3.1+EFCore三步快速完成数据库交互

前言

做程序开发,不管是什么语言什么数据库,其中的ORM(对象关系映射)是必不可少的,但是不管选择哪一种ORM,都需要了解其中的运行机制,配置帮助类等等。

所以很多ORM都开始进行升级封装,我们只需要引用即可,可谓是开箱即用,特别是对于初学者来说,快速建站不是梦。

PS:知其然而不知其所以然是不行的,要理解其中的运行机制和原理,不要为了写代码而写代码。

今天他来了,EFCore (Entity FraFramework Core)

Entity Framework Core (EF Core) 是适用于 .NET 的新式对象数据库映射器。 它支持 LINQ 查询、更改跟踪、更新和架构迁移。

EF Core 通过数据库提供程序插件模型与 SQL Server/Azure SQL 数据库、SQLite、Azure Cosmos DB、MySQL、PostgreSQL 和更多数据库配合使用。

三步实现数据库交互

1、创建项目

创建一个 ASP .Net Core Web API 项目,命名为 EFCore_NetCoreWebApi (自定义命名,你可以起一个合适的名字),版本选择 Net  Core 3.1

数据库是 SqlServer,当然,其他数据库也是可以的,不影响操作,很方便。

2、引入NuGet包并创建上下文对象

这里只需要两个包,一个是EFCore的引用包,一个是数据库连接的引用包。

在NuGet分别引入下面两个包,

Microsoft.EntityFrameworkCore

Microsoft.EntityFrameworkCore.SqlServer

 

创建上下文对象

在项目里面创建一个 EntityDbContext 文件夹,然后在文件夹里面创建一个 DbContext_first 类,并继承 EFCore框架中的 DbContext,

 EntityDbContext 文件夹下创建 Entity 文件夹,创建 StudentTable 实体映射。如下展示

PS:(注意,这里默认是数据库存在StudentTable表的,如果没有请先创建,EFCore支持实体映射表到数据库的,这里就不体现了,有需要了解的自行百度或私信小编)

using EFCore_NetCoreWebApi.EntityDbContext.Entity;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace EFCore_NetCoreWebApi.EntityDbContext
{
    public class DbContext_first: DbContext
    {
        /// <summary>
        /// 在这里重写OnConfiguring的方法来配置数据库的连接字符串
        /// </summary>
        /// <param name="optionsBuilder"></param>
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            //SQL Server/Azure SQL 数据库、SQLite、Azure Cosmos DB、MySQL、PostgreSQL数据库连接
            optionsBuilder.UseSqlServer("Data Source=DESKTOP-Q1V1K53\\MSSQLSERVER2012; Initial Catalog=Demo;User Id=sa;Password=0000@CIICSH");
        }
        public DbSet<StudentTable> StudentTable{ get; set; }  //需要操作的数据库对应的表
    }
}

为了很好的展示,配置连接我写在代码里,后续可放到配置文件,注意,NetCore3.1的配置文件读取方式和以往不同,注意甄别,如下,需要查看的点击代码,不需要的可以跳过。

View Code

展示一下创建好后的目录层级

3、编写几行代码

Controllers 文件夹下创建一个 StudentController 控制器,并配置路由,编写代码,如下:

using EFCore_NetCoreWebApi.EntityDbContext;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace EFCore_NetCoreWebApi.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class StudentController : Controller
    {
        //查询
        [HttpGet("GetStudentList")]
        public JsonResult GetStudentList()
        {
            using (var ctx=new DbContext_first())
            {
                var studeltList = ctx.StudentTable.ToList();
                return Json(studeltList);
            }
        }
    }
}

然后我们访问http://localhost:44571/api/Student/GetStudentList 就查询到数据了,成功交互,调试查看一下。

到这里就完成了数据库交互了,是不是超少的代码,超简单的逻辑。其他的增删改一样的,我们展示一下新增的例子,修改删除的就不展示了,需要具体了解的可以私信或评论区留言。

        //增加
        [HttpGet("StudentInsert")]
        public string StudentInsert()
        {
            using (var ctx = new DbContext_first())
            {
                int count = 0;
                List<StudentTable> modelList = new List<StudentTable>();
                StudentTable model = new StudentTable();
                model.Name = "喜洋洋";
                model.Sex = "男";
                model.Age = 10;
                model.ClassName = "发明三班";
                model.CreateTime = DateTime.Now;
                ctx.Add(model);  //单个添加
                count = ctx.SaveChanges();  //提交数据库交互
                //modelList.Add(model);
                //ctx.AddRange(model);  //批量添加
                //count = ctx.SaveChanges();  //提交数据库交互
                return count > 0 ? "添加成功" : "添加失败";
            }
        }

总结

对接进来很简单,使用也很方便,但是对于复杂sql语句(跨服务器跨库多表的查询)或其他业务场景不满足怎么办?

这个时候就会考虑使用sql语句的方式会不会比较好,调用存储过程是不是更优?在不引入第三方的情况下可以使用ado.net的方式来进行补位,比如:

 //sql连接
            string connectionString = "Data Source=DESKTOP-Q1V1K53\\MSSQLSERVER2012; Initial Catalog=Demo;User Id=sa;Password=0000@CIICSH"using (SqlConnection conn = new SqlConnection(connectionString))
            {
                conn.Open();
                string sql = "";
                sql = "INSERT INTO StudentTable VALUES('灰太狼','男','20','发明三班',GETDATE())";
                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    cmd.ExecuteNonQuery();
                }
                conn.Close();
                conn.Dispose();
            }
相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
相关文章
|
1月前
|
存储 SQL 监控
Visual Basic与数据库交互:实现数据访问和管理
【4月更文挑战第27天】本文探讨了使用Visual Basic进行数据库编程的基础,包括数据库基础、连接、数据访问技术如ADO.NET,数据绑定,事务处理,存储过程与视图。还强调了性能优化、安全性、测试与调试,以及持续维护的重要性。通过掌握这些概念和技巧,开发者能构建高效、可靠的数据驱动应用。
|
1月前
|
关系型数据库 API 数据库
盘点Flask与数据库的交互插件——Flask-Sqlalchemy
盘点Flask与数据库的交互插件——Flask-Sqlalchemy
48 0
|
1天前
|
JSON 缓存 数据库
Django ORM的QuerySet:解锁数据库交互的魔法钥匙
Django ORM的QuerySet:解锁数据库交互的魔法钥匙
|
6天前
|
Java 关系型数据库 数据库连接
【MyBatis】初步解析MyBatis:实现数据库交互与关系映射的全面指南
【MyBatis】初步解析MyBatis:实现数据库交互与关系映射的全面指南
14 1
|
7天前
|
Java 数据库连接 数据库
解密Persistence Context,精通ORM和数据库交互的关键!
解密Persistence Context,精通ORM和数据库交互的关键!
|
23天前
|
NoSQL 关系型数据库 MongoDB
DTS支持哪些非关系型数据库的数据交互?
【6月更文挑战第4天】DTS支持哪些非关系型数据库的数据交互?
23 1
|
2天前
|
缓存 Java 数据库连接
构建高效数据库交互:Hibernate与JPA的性能优化策略
【6月更文挑战第25天】在大数据时代,优化Hibernate和JPA的数据库性能至关重要。本文探讨了优化策略:正确配置映射以减少冗余,利用JPQL/HQL提升查询效率,避免全字段选择,使用索引和分页,有效利用缓存策略,以及管理事务以平衡资源锁定。示例代码展示了分页查询的实现,以防止性能下降。
|
1月前
|
存储 数据挖掘 关系型数据库
DataFrame 与数据库交互:从导入到导出
【5月更文挑战第19天】本文介绍了如何在数据分析中实现DataFrame与MySQL数据库之间的数据交互。通过`pandas`的`read_sql`函数可将数据库中的数据导入DataFrame,处理后使用数据库游标执行插入或更新操作将数据导回。注意数据类型匹配、数据完整性和一致性。对于大量数据,可采用分块读取和批量操作提升效率。这种交互能结合数据库的存储管理和DataFrame的分析功能,提高数据处理效率。
48 2
|
1月前
|
缓存 监控 中间件
中间件Cache-Aside策略应用程序直接与缓存和数据库进行交互
【5月更文挑战第8天】中间件Cache-Aside策略应用程序直接与缓存和数据库进行交互
36 4
|
1月前
|
SQL Java 数据库连接
Java从入门到精通:2.3.1数据库编程——学习JDBC技术,掌握Java与数据库的交互
ava从入门到精通:2.3.1数据库编程——学习JDBC技术,掌握Java与数据库的交互

热门文章

最新文章