其他分享
首页 > 其他分享> > .NET5 ABP框架(二)- WebApi

.NET5 ABP框架(二)- WebApi

作者:互联网

1. API功能

功能: 根据商品名查询商品信息

2. 创建商品实体

AbpTraining.Core\Products\Product.cs

using Abp.Domain.Entities.Auditing;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace AbpTraining.Products
{

    //可以显示的指定表名,不指定默认是实体名+s
    [Table("Product")]
    public class Product : FullAuditedEntity<long>
    {
        [Required]
        [StringLength(128)]
        public string Name { get; set; }

        public decimal Price { get; set; }
    }
}

3. 创建商品领域DomainService

AbpTraining.Core\Products\ProductDomainService.cs

using Abp.Domain.Repositories;
using Abp.Domain.Services;
using System.Threading.Tasks;
using System.Linq;
using Abp.UI;
using Microsoft.EntityFrameworkCore;

namespace AbpTraining.Products
{
    public class ProductDomainService : DomainService
    {
        private readonly IRepository<Product, long> _productRepository;

        public ProductDomainService(IRepository<Product, long> productRepository)
        {
            _productRepository = productRepository;
        }

        public async Task<Product> GetProductByName(string name)
        {
            var query = from p in _productRepository.GetAll()
                        where p.Name == name
                        select p;
            var product = await query.FirstOrDefaultAsync();
            if (product == null)
            {
                throw new UserFriendlyException($"商品({name})不存在");
            }
            if (product.Price < 0)
            {
                throw new UserFriendlyException($"商品({name})的价格小于0,请检查");
            }
            return product;
        }
    }
}

4. 创建商品ApplicationService

4.1 定义Dto

AbpTraining.Application\Products\Dto\ProductDto

using Abp.AutoMapper;

namespace AbpTraining.Products.Dto
{
    [AutoMapFrom(typeof(Product))]
    public class ProductDto
    {
        public string Name { get; set; }

        public decimal Price { get; set; }
    }
}

AbpTraining.Application\Products\Dto\GetProductByNameInput

using System.ComponentModel.DataAnnotations;

namespace AbpTraining.Products.Dto
{
    public class GetProductByNameInput
    {
        [Required]
        public string Name { get; set; }
    }
}

Mysoft.RDC.Application\Products\Dto\GetProductByNameOutput

namespace AbpTraining.Products.Dto
{
    public  class GetProductByNameOutput : ProductDto
    {
    }
}
4.2 定义ApplicationService接口

AbpTraining.Application\Products\IProductAppService.cs

using Abp.Application.Services;
using AbpTraining.Products.Dto;
using System.Threading.Tasks;

namespace AbpTraining.Products
{
    public interface IProductAppService : IApplicationService
    {
        Task<GetProductByNameOutput> GetProductByName(GetProductByNameInput input);
    }
}
4.3 商品ApplicationService实现

AbpTraining.Application\Products\ProductAppService.cs

using System.Threading.Tasks;

namespace AbpTraining.Products.Dto
{
    public class ProductAppService : AbpTrainingAppServiceBase, IProductAppService
    {
        private readonly ProductDomainService _productDomainService;
        public ProductAppService(ProductDomainService productDomainService)
        {
            _productDomainService = productDomainService;
        }

        public async Task<GetProductByNameOutput> GetProductByName(GetProductByNameInput input)
        {
            //1.将input dto转换为domain obj

            //2.调用doamin service
            var item = await _productDomainService.GetProductByName(input.Name);
            //call other doamin serivce

            //3.将domain obj转换为output dto
            var output = ObjectMapper.Map<GetProductByNameOutput>(item);

            return output;
        }
    }
}

5. 数据库

5.1 数据库实体映射

在AbpTraining.EntityFrameworkCore\EntityFrameworkCore\AbpTrainingDbContext.cs 中添加如下代码片段

public DbSet<Product> Products { get; set; }
5.2 生成migration文件

在包管理器控制台中,执行如下命令,生成迁移脚本文件

Add-Migration AddProduct -Verbos
5.3 更新数据库

在包管理器控制台中,执行如下命令,将新的实体同步数据库

Update-Database -Verbos

6. 运行服务、测试

设置AbpTraining.Web.Host为启动项目,直接在Visual Studio中运行, 在Swagger的API列表中找到/api/services/app/Product/GetProductByName 即可以开始测试。

ok,大功告成,亲测。

 

转自:https://www.cnblogs.com/lcyhjx/p/8698507.html

标签:WebApi,Dto,System,ABP,AbpTraining,Products,using,NET5,public
来源: https://www.cnblogs.com/PrintY/p/15322915.html