Mapper.project和Mapper.映射在Asp.net MVC核心



何时可以使用Mapper.ProjectToMapper.Map在Asp。Net核心应用?在实体框架核心中使用ProjectTo方法,如果我们在_mapper.ProjectTo语句的开头添加它,它会减少我从数据库查询以匹配模型的字段数吗?它将如何减少字段的查询数量?

不使用

_mapper.ProjectTo<CompareVarValdto>(_compareRepo.GetCompareDetailsByid(id))

我们可以用这个,对吧?

_mapper.Map<CompareVarValdto>(result)

ComapreVarValdto.cs

public class CompareVarValdto
{
public int CompareVarValId { get; set; }
public int CURRENT_CATEGORY_ID { get; set; }
public int Current_LaunguageId { get; set; }
public int Current_compareDimId { get; set; }
public string CONTENT { get; set; }
}

控制器get方法代码片段

[Route("api/[controller]")]
[ApiController]
public class ComapareController : ControllerBase
{
private readonly ICompare _compareRepo;
private readonly IMapper _mapper;
public ComapareController(ICompare compare, IMapper mapper)
{
_compareRepo = compare;
_mapper = mapper;
}
[HttpGet("{id:int}")]
public IActionResult GetComapare(int id)
{
try
{
return Ok(_mapper.ProjectTo<CompareVarValdto>(_compareRepo.GetCompareDetailsByid(id)));
//VS
//var result = _compareRepo.GetCompareDetailsByid(id);
//return Ok(_mapper.Map<CompareVarValdto>(result));
}
catch (Exception ex)
{
return StatusCode(StatusCodes.Status500InternalServerError,
"Error retrieving data from the database");
}
}

compareRepo数据库方法

public IQueryable<CompareDim> GetCompareDetailsByid(int compareId)
{
return _context.CompareDim.Include("Launguage");
}

reference: automapper LINQ deepdive

我认为这篇文章解释了你的问题。如果我没理解错的话,Mapper。Map在Project的内存中工作,以创建需要由底层查询提供程序解析和理解的表达式树。我不确定它是否会减少查询字段的数量。我的理解/猜测是,我希望人们会纠正我,ProjectTo更有效,因为查询只在构造完整的表达式树后执行,并且您使用查询提供程序来执行查询(在SQL中)。

在内存中工作时:"(…)

人们在这里遇到的主要问题是,通常源对象是从数据源填充的某个对象,无论它是关系源或非关系源。这意味着,原来Fetch提取的信息比我们需要的要多得多。">

情况似乎并非如此。

相关内容

  • 没有找到相关文章

最新更新