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);
}
}
}