ASP.NET 6 集成 EF Core

本文详细介绍了如何在ASP.NET6项目中集成EFCore进行数据库操作,包括创建项目、安装依赖、生成数据库实体、设置动态数据库连接、删除上下文对象中的部分内容、注册上下文以及实现增、删、查、改、多表查询、事务处理等基本功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

描述:

ASP.NET 6 集成 EF Core,实现了增删查改:添加、多表添加、事务、条件查询、模糊查询、查询全部、只查一条数据、排序、分组、分页、使用sql查询、多表查询-join(lanbda)、多表查询另一种写法(linq)、求总数、求和、修改、删除

目录

1、创建项目 

2、安装依赖

3、创建Models文件夹

4、在程序包管理器控制台-执行命令生成实体

5、设置动态数据库连接

6、删除上下文对象中红框部分 ​编辑

7、在Program.cs注册上下文并指定数据库连接字符串

8、实现增删查改


1、创建项目 

2、安装依赖

Install-Package Pomelo.EntityFrameworkCore.MySql -Version 6.0.2

Install-Package Microsoft.EntityFrameworkCore.Tools -Version 6.0.20

Install-Package Microsoft.VisualStudio.Web.CodeGeneration.Design -Version 6.0.15

3、创建Models文件夹

用途:存放数据库实体的地方

4、在程序包管理器控制台-执行命令生成实体

Scaffold-DbContext "server=127.0.0.1;userid=root;pwd=@admin123456;port=3305;database=jianyun;sslmode=Preferred;" Pomelo.EntityFrameworkCore.MySql -OutputDir Models -Force

 

 Scaffold-DbContext 为 DbContext 数据库的和实体类型生成代码。 为了使 Scaffold-DbContext 生成实体类型,数据库表必须具有主键。 参数: SCAFFOLD-DBCONTEXT 参数 说明 -连接 用于连接到数据库的连接字符串。 对于 ASP.NET Core 2.x 项目,值可以是 name = 。 在这种情况下,该名称来自为项目设置的配置源。 这是一个位置参数,并且是必需的。 -提供程序 要使用的提供程序。 通常,这是 NuGet 包的名称,例如: Microsoft.EntityFrameworkCore.SqlServer 。 这是一个位置参数,并且是必需的。

-OutputDir 要在其中放置文件的目录。 路径相对于项目目录。

-ContextDir 要在其中放置文件的目录 DbContext 。 路径相对于项目目录。 -命名空间 要用于所有生成的类的命名空间。 默认值为从根命名空间和输出目录生成。 在 EF Core 5.0 中添加。

-ContextNamespace 要用于生成的类的命名空间 DbContext 。 注意:重写 -Namespace 。 在 EF Core 5.0 中添加。 -上下文 DbContext要生成的类的名称。 -架构 <String[]> 要为其生成实体类型的表的架构。 如果省略此参数,则包括所有架构。 -表 <String[]> 要为其生成实体类型的表。 如果省略此参数,则包括所有表。  

-DataAnnotations 使用属性可在可能) 的情况下配置模型 (。 如果省略此参数,则只使用 Fluent API。

-UseDatabaseNames 使用表和列的名称与数据库中显示的名称完全相同。 如果省略此参数,则更改数据库名称以更严格地符合 c # 名称样式约定。

-Force 覆盖现有文件。

-NoOnConfiguring 不生成 DbContext.OnConfiguring 。 在 EF Core 5.0 中添加。

-NoPluralize 请勿使用复数化程序。 在 EF Core 5.0 中添加。

 5、设置动态数据库连接

修改appsettings.json,添加数据库连接字符串

 6、删除上下文对象中红框部分 

 7、在Program.cs注册上下文并指定数据库连接字符串

8、实现增删查改

创建控制器:HomeController.cs

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Internal;
using System.Linq;
using System.Net;
using WebApi.EFCore.Models;

namespace WebApi.EFCore.Controllers
{
    [Route("api/[controller]/[action]")]
    [ApiController]
    public class HomeController : ControllerBase
    {
        public readonly jianyunContext _jyContext;
        public HomeController(jianyunContext jyContext)
        {
            _jyContext = jyContext;
        }

        /// <summary>
        /// 添加、多表添加、事务
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public async Task<IActionResult> AddSysUser()
        {
            var tran = _jyContext.Database.BeginTransaction();//多表添加才用到
            try
            {
                SysUser sysUser = new SysUser();
                sysUser.Id = Guid.NewGuid().ToString("N");
                sysUser.Name = "Test";
                sysUser.Email = "1@qq.com";
                sysUser.Phone = "123456";
                sysUser.Sex = "0";
                sysUser.CreateTime = DateTime.Now;

                SysUserRole sysUserRole = new SysUserRole();
                sysUserRole.Id = Guid.NewGuid().ToString("N");
                sysUserRole.UserId = sysUser.Id;
                sysUserRole.RoleId = Guid.NewGuid().ToString("N");
                sysUserRole.IsDelete = false;
                sysUserRole.CreateBy = "admin";

                await _jyContext.AddAsync(sysUser);
                await _jyContext.AddAsync(sysUserRole);
                var result = await _jyContext.SaveChangesAsync();
                if (result > 0)
                {
                    tran.Commit();//多表添加才用到
                    return Ok(new
                    {
                        Code = StatusCodes.Status200OK,
                        Message = "创建成功",
                        Data = sysUser.Id
                    });
                }
                else
                {
                    return Ok(new
                    {
                        Code = StatusCodes.Status400BadRequest,
                        Message = "创建失败"
                    });
                }

            }
            catch (Exception)
            {
                tran.Rollback();//多表添加才用到
                return Ok(new
                {
                    Code = StatusCodes.Status500InternalServerError,
                    Message = "创建异常"
                });
            }
        }

        /// <summary>
        /// 条件查询、模糊查询、查询全部、只查一条数据、排序、分组、分页、使用sql查询、多表查询-join(lanbda)、多表查询另一种写法(linq)、求总数、求和
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        [HttpGet]
        public async Task<IActionResult> GetSysUser(string Id)
        {

            //条件查询
            var result1 = await _jyContext.SysUsers.Where(n => n.Id == Id).ToListAsync();

            //模糊查询
            var result2 = await _jyContext.SysUsers.Where(n => n.Name.Contains("Test")).ToListAsync();

            //查询全部
            var result3 = await _jyContext.SysUsers.ToListAsync();

            //只查一条数据
            var result4 = await _jyContext.SysUsers.FirstOrDefaultAsync();

            //排序
            var result5 = await _jyContext.SysUsers.OrderBy(n => n.CreateTime).ToListAsync();

            //分组
            var result6 = _jyContext.SysUsers.AsEnumerable().GroupBy(n => n.Sex).ToList();

            //分页
            int pageIndex = 1;//分页索引:第几页
            int pageSize = 10;//分页总数:一页多少条
            var result7 = await _jyContext.SysUsers.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToListAsync();

            //使用sql
            //sys_user为数据库表名,SysUsers是实体名,不要混淆
            String sql = string.Format($"select * from sys_user");
            var res = _jyContext.SysUsers.FromSqlRaw(sql);
            var result8 = await res.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToListAsync();

            //多表查询-join
            var result9 = _jyContext.SysUsers.Join(_jyContext.SysUserRoles, u => u.Id, r => r.UserId, (u, r) => new
            {
                name = u.Name,
                roleId = r.RoleId,
            }).ToList();

            //多表查询另一种写法
            var result10 = (
            from u in _jyContext.SysUsers
            join r in _jyContext.SysUserRoles on u.Id equals r.UserId into SysUserRoleList
            from SysUserRole in SysUserRoleList.DefaultIfEmpty()
            select new
            {
                u.Id,
                u.Name,
                SysUserRole.RoleId,
            })
            .ToList();

            //求总数
            var result11 = _jyContext.SysUsers.Count();

            //求和
            var result12 = _jyContext.SysLogs.Sum(n => n.Type);

            return Ok();
        }

        /// <summary>
        /// 修改
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        public async Task<IActionResult> Update(string Id)
        {
            var sysUser = await _jyContext.SysUsers.Where(n => n.Id == Id).FirstOrDefaultAsync();
            if (sysUser != null)
            {
                sysUser.Name = "1";
                int result = _jyContext.SaveChanges();
                if (result > 0)
                {
                    return Ok(new
                    {
                        Code = StatusCodes.Status200OK,
                        Message = "修改成功"
                    });
                }
                else
                {
                    return Ok(new
                    {
                        Code = StatusCodes.Status400BadRequest,
                        Message = "修改失败"
                    });
                }
            }
            else
            {
                return Ok(new
                {
                    Code = StatusCodes.Status400BadRequest,
                    Message = "查询无数据"
                });
            }


        }

        /// <summary>
        /// 删除
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        public async Task<IActionResult> Delete(string Id)
        {
            var sysUser = await _jyContext.SysUsers.Where(n => n.Id == Id).FirstOrDefaultAsync();
            if (sysUser != null)
            {
                _jyContext.SysUsers.Remove(sysUser);
                int result = _jyContext.SaveChanges();
                if (result > 0)
                {
                    return Ok(new
                    {
                        Code = StatusCodes.Status200OK,
                        Message = "删除成功"
                    });
                }
                else
                {
                    return Ok(new
                    {
                        Code = StatusCodes.Status400BadRequest,
                        Message = "删除失败"
                    });
                }
            }
            else
            {
                return Ok(new
                {
                    Code = StatusCodes.Status400BadRequest,
                    Message = "查询无数据"
                });
            }


        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Veken.Dai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值