0


WebAPI 初学 Visual Studio 2022,.NET 6.0(EF 代码迁移)

按照一步一步来,您将能够创建 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"
}

插入数据后,我们可以在数据库中检查

我们插入的数据可用。

现在我们已经实现了存储库模式。

标签: .Net6.0 webapi

本文转载自: https://blog.csdn.net/hefeng_aspnet/article/details/143565016
版权归原作者 csdn_aspnet 所有, 如有侵权,请联系我们删除。

“WebAPI 初学 Visual Studio 2022,.NET 6.0(EF 代码迁移)”的评论:

还没有评论