asp.net core webapi 使用EFcore结合Sqlserver

本文详细介绍了如何在ASP.NETCore中创建WebAPI项目,并结合EntityFrameworkCore(EFCore)和SQLServer实现数据模型的创建、分页查询以及数据库的初始化。包括安装依赖、配置上下文、实体类定义和数据库操作命令等步骤。

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

asp.net core webapi 使用EFcore结合Sqlserver
是由代码自动创建生成数据库

1.创建asp.net core web api 项目

在这里插入图片描述

2.完成后安装如下依赖包

Microsoft.EntityFrameworkCore、Microsoft.EntityFrameworkCore.SqlServer、Microsoft.EntityFrameworkCore.Tools
并且版本是7.0.15

在这里插入图片描述
3.项目结构如下
在这里插入图片描述
4.安装完成后 开始创建实体类

public class Student
    {

        public int Id { get; set; }

        public string UserName { get; set; }
    }

5.创建分页查询类

 public class Page
    {

        public int PageNumber { get; set; }
        public int PageSize { get; set; }
    }

6.创建请求参数类

 public class Addreq
    {
        public string UserName { get; set; }
    }

7.创建上下文

public class MyContext:DbContext
    {
        public MyContext(DbContextOptions<MyContext> options):base(options)
        { 
        
        }


       public DbSet<Student> Students { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Student>().Property(e => e.Id).ValueGeneratedOnAdd();
            // 添加初始种子数据
            //EF Core 要求种子数据的主键属性是非零值。
            //默认情况下,EF Core 认为主键为零的实体是要插入到数据库中的新实体,
            //而不是种子数据
            //可以将种子数据的 Id 属性值设置为负数或其他非零值,以避免与非种子数据发生冲突
            modelBuilder.Entity<Student>().HasData(
                new Student { Id = -1, UserName = "张三" },
                new Student { Id = -2, UserName = "李四" }
            );
        }
    }

8.在appseting.json中配置数据库连接字符串

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "MyContext": "Server=.;DataBase=demo2;uid=sa;pwd=sa123456;TrustServerCertificate=true"
  }
}

9.Program.cs添加如下配置

builder.Services.AddDbContext<MyContext>
    (opt =>
    {
        string connectionString = builder.Configuration.GetConnectionString("MyContext");
        opt.UseSqlServer(connectionString);
    });

必须写在var app = builder.Build();前面,因为:

在构建应用程序之后,无法修改 ServiceCollection, 确保在调用 Build() 方法之前,所有的服务配置代码已经完成,并且没有额外的试图修改 ServiceCollection 的代码,所以连接数据库服务必须写在这

10.命令创建生成数据库

点击工具-nuget包管理器-程序包管理器控制台

输入如下命令 命令分开执行
add-migration init

update-database

如果正常输出 则说明生成成功 可以到数据库中查看

11.添加控制器,并实现增删改查

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using TestEF4SqlServer.Entity;

namespace TestEF4SqlServer.Controllers
{
    [Route("api/[controller]/[action]")]
    [ApiController]
    public class ValuesController : ControllerBase
    {

        private readonly MyContext context;
        
        public ValuesController(MyContext context)
        { 
        this.context=context;
        }


        /// <summary>
        /// 查询所有数据
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        public IEnumerable<Student> GetAll()
        {
            if (!context.Students.Any())
            {
                return (IEnumerable<Student>)Enumerable.Empty<string>().Append("无数据");
            }
            return context.Students.ToList();
        }




        /// <summary>
        /// 添加数据
        /// </summary>
        /// <param name="req"></param>
        /// <returns></returns>
        [HttpPost]
        public IActionResult Create(Addreq req)
        {
            if (req.UserName == null)
            {
                //如果绑定失败或传入的对象为空,
                //方法会返回一个 HTTP 400 Bad Request 响应
                return BadRequest();
            }
                Student info = new Student()
            {
                //生成一个唯一的哈希码作为ID,不使用则按照定义的自增增加 
                // 这个需要把sqlserver中的自增关闭掉 否则会报错的
                Id = Math.Abs(Guid.NewGuid().GetHashCode()),
                UserName = req.UserName
            };
            context.Students.Add(info);
            context.SaveChanges();

            return Ok(info);
        }

        /// <summary>
        /// 修改数据
        /// </summary>
        /// <param name="id"></param>
        /// <param name="updatedStudent"></param>
        /// <returns></returns>
        [HttpPut]
        public IActionResult Update(int id, [FromBody] Student updatedStudent)
        {
            var students = context.Students.FirstOrDefault(m => m.Id == id);
            if (students != null)
            {
                students.UserName = updatedStudent.UserName;
                context.SaveChanges();
            }

            return Ok();
        }

        /// <summary>
        /// 删除数据
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        [HttpDelete]
        public IActionResult Delete(int id)
        {
            var students = context.Students.Find(id);
            if (students == null)
            {
                return NotFound();
            }

            context.Students.Remove(students);
            context.SaveChanges();

            return NoContent();
        }


        /// <summary>
        /// 分页查询数据
        /// </summary>
        /// <param name="page"></param>
        /// <returns></returns>
        [HttpGet]
        public IActionResult GetByPage([FromQuery] Page page)
        {
            //查询上下文中Student实体的查询
            var query = context.Students;

            //这是一系列LINQ方法,用于对查询结果进行分页操作。
            //Skip方法用于跳过指定数量的元素,
            //Take方法用于选择指定数量的元素,
            //ToList方法用于将查询结果转换为List集合。
            var userList = query.Skip((page.PageNumber - 1) * page.PageSize)
                    .Take(page.PageSize)
                    .ToList();
            //统计了Student实体的总数
            var totalCount = context.Students.Count();

            var result = new
            {
                TotalCount = totalCount,//数据总数
                Data = userList
            };

            return Ok(result);
        }

    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值