按照一步一步来,您将能够创建 api
选择 C#、Windows 和 WebApi
创建 API 后,单击绿色按钮运行应用程序,
现在我们可以看到 Demo 项目正在运行。尽管所有结构都是自动创建的,以运行 API。
此版本已自动配置 Swagger。
这是演示 API。Visual Studio 会自动添加所需的库。
现在我们可以根据要求开始编码并创建 API。
首先,我们将创建模型类,在其中定义表。
步骤1.
右键单击项目并选择添加 → 新建文件夹 → 将其命名为模型
在 Model 文件夹 Domain 和 DTOs 中创建两个文件夹
右键单击模型文件夹中的域文件夹→添加→类→将其命名为Employee.cs
打开员工模型类并需要添加属性
键入 prop 并按下 tab
它将生成属性,您可以根据需要更改属性的名称和类型。
using System.ComponentModel.DataAnnotations;
namespace HR_API.Models.Domain
{
public class Employee
{
[Key]
public Guid ID { get; set; }
public int EMPNO { get; set; }
public string ENAME { get; set; }
public string JOB { get; set; }
public string MGR { get; set; }
public DateTime HIREDATE { get; set; }
}
}
现在我们将使用 DBContext 类。
这将帮助我们:
- 维护与数据库的连接。
- 追踪修订
- 执行 CRUD 操作。
- 领域模型和数据库之间的桥梁。
要使用 DBContext 类,首先我们需要创建另一个文件夹来分离代码。
要使用 DBContext 类,我们需要为 DBContext 安装两个库。
右键单击项目
NuGet 包管理器
浏览并安装这两个包。
- 微软.EntityFrameworkCore.SqlServer
- Microsoft.EntityFrameworkCore.Tools
版本:- 6.0
将新文件夹添加到项目并将其命名为数据
将新文件添加到数据文件夹
右键→添加→类别
using HR_API.Models;
using HR_API.Models.Domain;
using Microsoft.EntityFrameworkCore;
namespace HR_API.Data
{
public class ApplicationDBContext:DbContext
{
public ApplicationDBContext(DbContextOptions options) : base(options)
{
}
public DbSet<Employee> Employees { get; set; }
}
}
现在需要在 appsetting.json 中添加连接字符串
要添加,我们需要 SQL 服务器名称
从 SQL 服务器复制服务器名称连接到服务器窗口
应用程序设置.json
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"HRConnectionString": "Server=localhost\\4533\\SQLEXPRESS;Database=HR;TrustserverCertificate=True;Trusted_Connection=True;"
}
}
依赖注入:
在 program.cs 中添加
using HR_API.Data;
using Microsoft.EntityFrameworkCore;
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<ApplicationDBContext>(options =>
{
options.UseSqlServer(builder.Configuration.GetConnectionString("HRConnectionString"));
});
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
EF 代码迁移:
现在使用 EFCode Migration 根据您创建的模型在数据库中创建表。
运行代码迁移
工具 → NuGet 包迁移 → 包迁移控制台。—
添加迁移“NameofMigration”
添加迁移“初始迁移”
在此迁移的帮助下,创建了一个迁移文件
现在我们需要更新数据库
类型:更新数据库
现在您可以看到 HR 数据库已创建,并且数据库中已创建 Employee 表
现在我们需要在 API 中创建一个控制器
如何创建控制器:
右键单击 Controller 文件夹 → 添加 → 控制器
现在在 Model 文件夹中创建一个 DTO 文件夹
在 DTO 中创建一个文件以将数据插入数据库。
创建员工请求数据
namespace HR_API.Models.DTOs
{
public class CreateEmployeeRequestDto
{
public int EMPNO { get; set; }
public string ENAME { get; set; }
public string JOB { get; set; }
public string MGR { get; set; }
public DateTime HIREDATE { get; set; }
}
}
现在创建另一个文件来从数据库获取响应
员工数据表
namespace HR_API.Models.DTOs
{
public class EmployeeDto
{
public Guid ID { get; set; }
public int EMPNO { get; set; }
public string ENAME { get; set; }
public string JOB { get; set; }
public string MGR { get; set; }
public DateTime HIREDATE { get; set; }
}
}
创建请求和响应模型后,在控制器文件中进行更改:
using HR_API.Models.DTOs;
using HR_API.Models.Domain;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using HR_API.Data;
using Microsoft.EntityFrameworkCore;
namespace HR_API.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class EmployeeController : ControllerBase
{
private readonly ApplicationDBContext dbContext;
public EmployeeController(ApplicationDBContext dbContext)
{
this.dbContext = dbContext;
}
[HttpPost]
public async Task<IActionResult> CreateEmployee(CreateEmployeeRequestDto requestDto)
{
//map dto to domain model
var employee = new Employee
{
EMPNO = requestDto.EMPNO,
ENAME = requestDto.ENAME,
JOB = requestDto.JOB,
MGR = requestDto.MGR,
HIREDATE = requestDto.HIREDATE
};
await dbContext.Employees.AddAsync(employee);
await dbContext.SaveChangesAsync();
//domain model to dto
var response = new EmployeeDto
{
EMPNO = employee.EMPNO,
ENAME = employee.ENAME,
JOB = employee.JOB,
MGR = employee.MGR,
HIREDATE = employee.HIREDATE
};
return Ok(response);
}
}
}
现在检查数据库,目前没有数据。
运行应用程序后
执行api后,数据就被插入了。
第一部分结束
第 2 部分。
在以上部分中,我们创建了在表中插入数据的 API。
存储库模式:
- 存储库模式是一种用于将数据访问层与应用程序分离的设计模式。
- 提供接口但不暴露实现
- 有助于创建抽象。
存储库模式的好处:
- 解耦
- 一致性
- 表现
- 多数据源(切换)
实现存储库模式
添加新文件夹,将其命名为 Repositories
在 Repositories 文件夹中创建 Interface 和 Implementation 文件夹
创建一个接口作为IEmployeeRepository.cs
using HR_API.Models;
using HR_API.Models.Domain;
namespace HR_API.Repositories.Interface
{
public interface IEmployeeRepository
{
Task<Employee> CreateEmployeeAsync(Employee employee);
}
}
EmployeeRepository.cs
using HR_API.Data;
using HR_API.Models.Domain;
using HR_API.Repositories.Interface;
namespace HR_API.Repositories.Implementation
{
public class EmployeeRepository : IEmployeeRepository
{
private readonly ApplicationDBContext dBContext;
public EmployeeRepository(ApplicationDBContext dBContext)
{
this.dBContext = dBContext;
}
public async Task<Employee> CreateEmployeeAsync(Employee employee)
{
await dBContext.Employees.AddAsync(employee);
await dBContext.SaveChangesAsync();
return employee;
}
}
}
现在我们必须将此存储库类注入到 program.cs 文件中
using HR_API.Data;
using HR_API.Repositories.Implementation;
using HR_API.Repositories.Interface;
using Microsoft.EntityFrameworkCore;
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<ApplicationDBContext>(options =>
{
options.UseSqlServer(builder.Configuration.GetConnectionString("HRConnectionString"));
});
builder.Services.AddScoped<IEmployeeRepository,EmployeeRepository>();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
现在我们需要在 EmployeeController.cs 中进行更改
我们正在将存储库类注入到我们的控制器中。
private readonly IEmployeeRepository employeeRepository;
public EmployeeController(IEmployeeRepository employeeRepository )
{
this.employeeRepository = employeeRepository;
}
public async Task<IActionResult> CreateEmployee(CreateEmployeeRequestDto requestDto)
{
//map dto to domain model
var employee = new Employee
{
EMPNO = requestDto.EMPNO,
ENAME = requestDto.ENAME,
JOB = requestDto.JOB,
MGR = requestDto.MGR,
HIREDATE = requestDto.HIREDATE
};
await employeeRepository.CreateEmployeeAsync(employee);
}
EmployeeController.cs
using HR_API.Models.DTOs;
using HR_API.Models.Domain;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using HR_API.Data;
using Microsoft.EntityFrameworkCore;
using HR_API.Repositories.Interface;
namespace HR_API.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class EmployeeController : ControllerBase
{
private readonly IEmployeeRepository employeeRepository;
public EmployeeController(IEmployeeRepository employeeRepository )
{
this.employeeRepository = employeeRepository;
}
[HttpPost]
public async Task<IActionResult> CreateEmployee(CreateEmployeeRequestDto requestDto)
{
//map dto to domain model
var employee = new Employee
{
EMPNO = requestDto.EMPNO,
ENAME = requestDto.ENAME,
JOB = requestDto.JOB,
MGR = requestDto.MGR,
HIREDATE = requestDto.HIREDATE
};
await employeeRepository.CreateEmployeeAsync(employee);
//domain model to dto
var response = new EmployeeDto
{
EMPNO = employee.EMPNO,
ENAME = employee.ENAME,
JOB = employee.JOB,
MGR = employee.MGR,
HIREDATE = employee.HIREDATE
};
return Ok(response);
}
}
}
现在运行应用程序并插入数据
{
"id": "00000000-0000-0000-0000-000000000000",
"empno": 104,
"ename": "David",
"job": "Mgr",
"mgr": "102",
"hiredate": "2024-02-18T19:32:35.168Z"
}
插入数据后,我们可以在数据库中检查
我们插入的数据可用。
现在我们已经实现了存储库模式。
版权归原作者 csdn_aspnet 所有, 如有侵权,请联系我们删除。