AutoMapper

本文介绍了如何使用AutoMapper在.NET中配置数据库实体类到TDO对象的映射,以及如何在API接口中集成这些操作,包括添加、更新、删除和获取书籍数据的方法实现。
摘要由CSDN通过智能技术生成
  1. List item

AutoMapper

`首先安装程序包Install-Package AutoMapper

先创建数据库的实体类 和 数据库实体类的封装ToDo
 public class Book
    {
       public int Id { get; set; }  
       public string Title { get; set; }    
        public long Price { get; set; }
    }
   
    public class BookTdo
    {
        public int Id { get; set; }
        public string Title { get; set; }
        public long Price { get; set; }
    }

跟着创建一个配置类 用来配置文件的映射
CustomProfile.cs
 public class CustomProfile : Profile
    {
        public CustomProfile()
        {
        	//后续需要进行一个文件映射的配置 直接添加就可以了
            CreateMap<Book, BookTdo>().ReverseMap(); //创建一个映射文件
        }
    }
    
 配置好之后:builder.Services.AddAutoMapper(typeof(CustomProfile)); 注入一下
 		var mapper = app.Services.GetRequiredService<IMapper>(); 这个写在var app下一级
   
   
    
然后创建一个模拟接口,可以理解为是对外暴露的一组操作方法
 public interface IBookServer
    {       
        // 这里是用Tdo 而不是使用数据库的实体类,Tdo可以说成是数据库实体类对外暴露的一种封装
        Task<IEnumerable<BookTdo>> GetAllBook();
        Task<BookTdo> GetById(int id);

        Task<BookTdo> AddBook(BookTdo bookDto);
        Task<BookTdo> UpdateBook(int id, BookTdo bookDto);
        Task DeleteBook(int id);
    }
 
然后实现这里面的操作方法BookService.cs
	 public class BookService : IBookServer
    {
        private readonly IMapper _mapper;

        private readonly MeDbContext _dbContext;

        public BookService(IMapper _mapper, MeDbContext _dbContext)
        {
            this._mapper = _mapper;
            this._dbContext = _dbContext;
        }

        public async Task<BookTdo> AddBook(BookTdo bookDto)
        {
            var book = _mapper.Map<Book>(bookDto);
            _dbContext.Books.Add(book);
            await _dbContext.SaveChangesAsync();
            return _mapper.Map<BookTdo>(book);
        }

        public async  Task DeleteBook(int id)
        {
            var book = await _dbContext.Books.FindAsync(id);
            if (book != null)
            {
                _dbContext.Books.Remove(book);
                await _dbContext.SaveChangesAsync();
            }
        }

        public async Task<IEnumerable<BookTdo>> GetAllBook()
        {
            var books = await _dbContext.Books.ToListAsync();
            return _mapper.Map<IEnumerable<BookTdo>>(books);
        }

        public async Task<BookTdo> GetById(int id)
        {
            var book = await _dbContext.Books.FindAsync(id);
            return _mapper.Map<BookTdo>(book);
        }

        public async Task<BookTdo> UpdateBook(int id, BookTdo bookDto)
        {
            var existingBook = await _dbContext.Books.FindAsync(id);
            if (existingBook == null)
            {
                throw new Exception("Book not found");
            }

            _mapper.Map(bookDto, existingBook);

            await _dbContext.SaveChangesAsync();

            return _mapper.Map<BookTdo>(existingBook);
        }
    }

完成这上面的操作之后 来到控制器:
	
    [Route("api/[controller]/[action]")]
    [ApiController]
    public class ValuesController : ControllerBase
    {
        private readonly IMapper _mapper;
        private readonly IBookServer _bookServer;

        public ValuesController(IMapper mapper, IBookServer bookServer)
        {
            _mapper = mapper;
            _bookServer = bookServer;
        }

        [HttpGet]
        public ActionResult<IEnumerable<BookTdo>> GetAll()
        {
            var books = _bookServer.GetAllBook();
            return Ok(_mapper.Map<IEnumerable<BookTdo>>(books));
        }
        ...其他功能
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值