说明:netcore webapi+net6+EF Core版本,codefirst模式(代码创建数据库)
1.netcore webapi+net6+EF Core版本,dbfirst模式(代码生成数据库)见:使用EF Core创建webapi接口(一)-CSDN博客
2.netcore webapi+net6+EF Core+vue前后端联动版本,见---(码字中)---
3.netcore webapi+net6+sqlsugar+vue2前后端联动版本,见Sqlsugar+vue2实现增删改查,分页查询,net6实现_.net core 6.0 sqlsugar-CSDN博客
1.创建netcore weiapi+net6项目
2.安装nuget包
Microsoft.EntityFrameworkCore、Microsoft.EntityFrameworkCore.SqlServer、Microsoft.EntityFrameworkCore.Tools
注意,最新版本只支持net8.0,需要降级到7版本就行
3.创建实体类
上方创建的数据库中的表名为Daily,所以在此处也创建相同名字的实体类,以便区分
public class Daily { public int Id { get; set; } public string Title { get; set; } }
4.创建上下文
public class MyContext : DbContext { public MyContext(DbContextOptions<MyContext> options) : base(options) { } //定义数据集合:用于创建表 public DbSet<Daily> Daily { get; set; } // 此方法将在数据库第一次创建时自动调用 protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Daily>().Property(e => e.Id).ValueGeneratedOnAdd(); // 添加初始种子数据 //EF Core 要求种子数据的主键属性是非零值。 //默认情况下,EF Core 认为主键为零的实体是要插入到数据库中的新实体, //而不是种子数据 //可以将种子数据的 Id 属性值设置为负数或其他非零值,以避免与非种子数据发生冲突 modelBuilder.Entity<Daily>().HasData( new Daily { Id = -1, Title = "Daily 1" }, new Daily { Id = -2, Title = "Daily 2" } ); }
5.连接数据库字符串
这是我的
"ConnectionStrings": {
"MyContext": "Server=.;DataBase=demo1;uid=sa;pwd=123456;TrustServerCertificate=true"
},
添加到appsetting.json,全文如下
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "ConnectionStrings": { "MyContext": "Server=.;DataBase=数据库名;uid=账号;pwd=密码;TrustServerCertificate=true" }, "AllowedHosts": "*" }
6.添加映射关系
builder.Services.AddDbContext<MyContext>
(opt =>
{
string connectionString = builder.Configuration.GetConnectionString("MyContext");
opt.UseSqlServer(connectionString);
});
必须写在var app = builder.Build();前面,因为:
在构建应用程序之后,无法修改 ServiceCollection, 确保在调用 Build() 方法之前,所有的服务配置代码已经完成,并且没有额外的试图修改 ServiceCollection 的代码,所以连接数据库服务必须写在这
添加到Program.cs,全文如下
using Microsoft.EntityFrameworkCore; using todo.Service; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); builder.Services.AddDbContext<MyContext> (opt => { string connectionString = builder.Configuration.GetConnectionString("MyContext"); opt.UseSqlServer(connectionString); }); var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseAuthorization(); app.MapControllers(); app.Run();
7.生成数据库
工具-nuget包管理器-程序包管理器控制台
输入add-migration init
update-database
没有报错,可以到数据库查看是否生成成功,成功后进行下一步
8.添加控制器,并实现增删改查
注意,这些代码只是实现了简单的增删改查,没有添加如非空判断和其他错误判断
[Route("api/[controller]")] public class todoController : ControllerBase { private readonly MyContext context; public todoController(MyContext context) { this.context = context; } [HttpGet] public IEnumerable<Daily> GetAll() { return context.Daily.ToList(); } [HttpGet("分页查询数据")] public IActionResult GetByPage(int pageNumber) { int pageSize = 10; // 每页显示的数据数量 int totalItems = context.Daily.Count(); int totalPages = (int)Math.Ceiling((double)totalItems / pageSize); if (pageNumber < 1 || pageNumber > totalPages) { return BadRequest("Invalid page number."); } IEnumerable<Daily> data = context.Daily .Skip((pageNumber - 1) * pageSize) .Take(pageSize) .ToList(); // 构建一个包含分页信息和数据的对象 var result = new { TotalItems = totalItems, TotalPages = totalPages, CurrentPage = pageNumber, Data = data }; return Ok(result); } [HttpPost("添加数据")] public IActionResult Create([FromBody] Daily daily) { if (daily == null) { //如果绑定失败或传入的对象为空, //方法会返回一个 HTTP 400 Bad Request 响应 return BadRequest(); } context.Daily.Add(daily); context.SaveChanges(); return Ok(daily); } [HttpPut("修改数据")] public IActionResult Update(int id, [FromBody] Daily updatedDaily) { var daily = context.Daily.Find(id); if (daily == null) { return NotFound(); } // 更新待办事项的属性 daily.Title = updatedDaily.Title; context.SaveChanges(); return Ok(daily); } [HttpDelete("删除数据")] public IActionResult Delete(int id) { var daily = context.Daily.Find(id); if (daily == null) { return NotFound(); } context.Daily.Remove(daily); context.SaveChanges(); return NoContent(); } }