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的配置文件读取方式和以往不同,注意甄别,如下,需要查看的点击代码,不需要的可以跳过。
1、首先在控制器引入读配置文件对象 private readonly IConfiguration _IConfiguration;
public ThirdController(IConfiguration IConfiguration)
{
_IConfiguration = IConfiguration;
} 2、然后读取 var AllowedHosts = this._IConfiguration["AllowedHosts"];
var write = this._IConfiguration["ConnectionStrings:DbWrite"];
var write0 = this._IConfiguration["ConnectionStrings:DbWrite:0"];
var readarray = this._IConfiguration.GetSection("ConnectionStrings").GetSection("DbReads").GetChildren().Select(a => a.Value).ToArray(); 3、配置文件的格式(看需求配置) {
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"ConnectionStrings": {
"DbWrite": "Server=.;Database=LhHt6;Persist Security Info=True;User ID=sa;password=Sasa123;MultipleActiveResultSets=true",
"DbReads": [
"Server=.;Database=LhHt6;Persist Security Info=True;User ID=sa;password=Sasa123;MultipleActiveResultSets=true",
"Server=.;Database=LhHt6;Persist Security Info=True;User ID=sa;password=Sasa123;MultipleActiveResultSets=true",
"Server=.;Database=LhHt6;Persist Security Info=True;User ID=sa;password=Sasa123;MultipleActiveResultSets=true"
]
},
"AllowedHosts": "*"
}
展示一下创建好后的目录层级
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();
}
欢迎关注订阅微信公众号【熊泽有话说】,更多好玩易学知识等你来取
作者:熊泽-学习中的苦与乐 公众号:熊泽有话说 出处:https://www.cnblogs.com/xiongze520/p/15049031.html 创作不易,任何人或团体、机构全部转载或者部分转载、摘录,请在文章明显位置注明作者和原文链接。 |
10分钟系列:NetCore3.1+EFCore三步快速完成数据库交互的更多相关文章
- Cache系列:spring-cache简单三步快速应用ehcache3.x-jcache缓存(spring4.x)
前言:本项目基于spring4.x构建,使用ehcache3.5.2和JCache(jsr107规范) 一.依赖 除了ehcache和cache-api外,注意引用spring-context-sup ...
- 只需三步 快速完善网站Sitemap
越来越多的SEOer把优化的重点放在了站内优化上,细心的朋友应该查看一些前辈的robots.txt的时候不难发现,他们的robots中都加 入了一句Sitemap: http://www.dewang ...
- 三步快速解决dll冲突问题
最近在推广应用我们的分布式服务网关(Web Api):业务组大部分对外的业务逻辑以HSF服务或者自定义扩展插件的方式,注册并发布到分布式服务网关中,统一对外提供WebApi服务.临时介绍下我们的分布式 ...
- spring-data详解之spring-data-jpa:简单三步快速上手spring-data-jpa开发
前言: 基于spring framework 4.x或spring boot 1.x开发环境 务必注意以下版本问题:Spring framework4.x(Spring boot1.x)对应sprin ...
- 简单三步快速学会使用Mybatis-Generator自动生成entity实体、dao接口以及mapper映射文件(postgre使用实例)
前言: mybatis-generator是根据配置文件中我们配置的数据库连接参数自动连接到数据库并根据对应的数据库表自动的生成与之对应mapper映射(比如增删改查,选择性增删改查等等简单语句)文件 ...
- iOS开发- 三步快速集成社交化分享工具ShareSDK
1.前言 作为现在App里必不可少的用户分享需要,社交化分享显然是我们开发app里较为常用的. 最近因为公司App有社交化分享的需要,就特此研究了会,拿出来与大家分享. 想要集成社交会分享,我们可以使 ...
- 在WINDOWS下 三步快速配置 eclipse c++ 环境
所需软件 1.Eclipse IDE for C/C++ Developers http://www.eclipse.org/downloads/packages/eclipse-ide-cc-dev ...
- windows环境30分钟从0开始快速搭建第一个docker项目(带数据库交互)
前言 小白直接上手 docker 构建我们的第一个项目,简单粗暴,后续各种概念边写边了解,各种概念性的内容就不展开,没了解过的点击 Docker 教程 进行初步了解. Docker 是一个开源的应用 ...
- 10天学会phpWeChat——第三天:从数据库读取数据到视图
在第二天,我们创建了我们的第一个phpWeChat功能模块,但是比较简单.实际生产环境中,我们不可能有如此简单的需求.更多的情况是数据存储在MySql数据库中,我们开发功能模块的作用就是将这些数据从M ...
随机推荐
- 深度学习Dropout技术分析
深度学习Dropout技术分析 什么是Dropout? dropout是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃.注意是暂时,对于随机梯度下降来说,由于是随机 ...
- 教你三种jQuery框架实现元素显示及隐藏动画方式
摘要:在jQuery框架中对元素对象进行显示和隐藏有三种方式,分别是"默认方式显示和隐藏"."滑动方式显示和隐藏"."淡入淡出显示和隐藏". ...
- 【模拟8.11】将军令(贪心&&树形DP)
只看45分的话,是树形DP....(当然也有能拿到70分+的大佬) 40分: 只考虑k==1的情况,树形DP 所以每个节点可能被父亲,自己,儿子控制 设f[MAXN][3],0表示儿子,1表示自己,2 ...
- 【模拟8.01】matrix(DP杂题,思维题)
很神的题,感谢lnc大佬的指点. 先设1-LL[i]统称左区间,RR[i]-m为右区间 用L[i]统计从1-i列,出现的左区间端点的前缀和,R[i]是右区间.... f[i][j]中j表示当前在第i列 ...
- 从五大结构体,带你掌握鸿蒙轻内核动态内存Dynamic Memory
摘要:本文带领大家一起剖析了鸿蒙轻内核的动态内存模块的源代码,包含动态内存的结构体.动态内存池初始化.动态内存申请.释放等. 本文分享自华为云社区<鸿蒙轻内核M核源码分析系列九 动态内存Dyna ...
- [UWP] WinUI 2.6 使用指南
2021年6月24日,Windows 11 正式对外发布,对于UWP开发者来说,这一天同样值得纪念,因为WinUI 2.6也正式发布了! 相同的时间点意味着一件事,即WinUI 2.6和Windows ...
- gRPC入门—golang实现
1.RPC 1.1 什么是RPC RPC(Remote Procedure Call),即远程过程调用,过程就是方法,简单来说,它就是一种能够像调用本地方法一样调用远程计算机进程中的方法的技术,在这种 ...
- VLAN协议与三层交换机 (Access/Trubk/Hrbrid)
VLAN协议与三层交换机(Access/Trunk/Hybrid) 目录 一.VLAN概述 1.1.分割广播域 1.2.VLAN的优势 1.3.静态VLAN 二.Trunk的作用 2.1.概念 2.2 ...
- NAT介绍与配置
一,NAT定义 二.NAT的分类 三,NAT配置实验 一,NAT定义 NAT(Network Address Translation),网络地址转换技术,随着Internet的发展,IPv4地址枯竭已 ...
- hive学习笔记之六:HiveQL基础
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...