- 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));
}
...其他功能
}