首页 > 解决方案 > 使用 UseValue 将自定义值传递给 Automapper

问题描述

我在控制器中使用 Automapper,但第一次调用后数据没有被刷新。

public class Somethings
{
    public int Id {get; set;}
    public string Info1 {get; set;}
    public string Info2  {get; set;}
}

public class Details
{
    public int Id {get; set;}
    public string Detail1 {get; set;}
    public string Details2  {get; set;}
    public DateTime LogDate {get; set;}
}   

public class SomethingDetails : Somethings
{
    public string SomethingSpecific {get; set;}
}   

public async Task<IActionResult> Details(int? id)
{
    var somethings = await _context.Somethings
        .SingleOrDefaultAsync(m => m.Id == id);

    var details = await _context.Details.OrderByDescending(o => o.LogDate).FirstOrDefaultAsync(m => m.IdSomething == id);

    var somethingSpecific = details.Detail1;

    SomethingDetails somethingDetails = _mapper.Map<Somethings, SomethingDetails>(somethings, opt => opt.ConfigureMap().ForMember(d => d.SomethingSpecific, a => a.UseValue(somethingSpecific)));

    return View(somethingDetails);
}

somethingDetails.SomethingSpecific 值在第一次调用 Details 后不会改变。我看到一对夫妇从以前版本的 Automapper 中解决了这个问题,但我认为 UseValue 只是为了这个目的。我错了吗?

标签: c#asp.net-coreautomapper

解决方案


我根据你的代码做了一个演示,它工作。尝试在以下代码中将“IdSomething”更改为“Id”

var details = await _context.Details.OrderByDescending(o => o.LogDate).FirstOrDefaultAsync(m => m.IdSomething == id);

推荐阅读