【问题标题】:C# Automapper: Nullable Boolean Not working for different Class member namesC# Automapper:Nullable Boolean 不适用于不同的类成员名称
【发布时间】:2020-12-07 02:11:13
【问题描述】:

Automapper 没有在两个具有不同名称的布尔型可空成员之间正确映射。 这总是会导致目标中的 Null。如何解决?

CreateMap<{Product, ProductDto>()
     .ForMember(dest => dest.ProductStatus, opt => opt.MapFrom(src => src.Status))
     .ReverseMap();

被这样称呼,

var productList = _mapper.Map<IEnumerable<ProductDto>, IEnumerable<Product>>(productDtoList);


public class ProductDto
{
    public int ProductId{ get; set; }
    public string ProductName{ get; set; }
    public bool? ProductStatus { get; set; }
} 

public class Product
{
    public int ProductId { get; set; }
    public string ProductName { get; set; }
    public bool? Status { get; set; }
} 

更新:当我将 ProductDto 和 Product 都命名为 Status,而不是 ProductDto 上的 ProductStatus 时,它似乎正在工作

目前使用的是 Net Core 3.1

【问题讨论】:

  • 需要更多信息,例如 QueueQueueDto 类以及您如何称呼它。
  • 在源和目标中都是可为空的布尔值,经过编辑以显示其调用方式

标签: c# .net .net-core automapper


【解决方案1】:

我创建了一个快速控制台应用程序,一切正常,所以我不确定问题出在哪里。确保您的配置实际应用于您的_mapper。我只能猜测这可能是问题所在。

class Program
{
    static void Main(string[] args)
    {
        var configuration = new MapperConfiguration(cfg => cfg
            .CreateMap<Product, ProductDto>()
            .ForMember(dest => dest.ProductStatus, opt => opt.MapFrom(src => src.Status))
            .ReverseMap()
        );

        var mapper = new Mapper(configuration);

        var productDtoList = new List<ProductDto>
        {
            new ProductDto { ProductId = 0, ProductName = "Product 1", ProductStatus = false },
            new ProductDto { ProductId = 1, ProductName = "Product 2", ProductStatus = true },
            new ProductDto { ProductId = 2, ProductName = "Product 3", ProductStatus = null },
        };

        var productList = mapper.Map<List<Product>>(productDtoList);

        foreach(var product in productList)
        {
            Console.WriteLine($"{product.ProductId}\t{product.ProductName}\t{product.Status}");
            // Output
            // 0    Product 1   False
            // 1    Product 2   True
            // 2    Product 3   
        }
    }
}

public class ProductDto
{
    public int ProductId { get; set; }
    public string ProductName { get; set; }
    public bool? ProductStatus { get; set; }
}

public class Product
{
    public int ProductId { get; set; }
    public string ProductName { get; set; }
    public bool? Status { get; set; }
}

【讨论】:

  • 我认为可能还有其他问题。我改变了答案。
  • 对不起,我在底部也有反向地图,我上面给出的就是现在的全部内容
  • 我用一个按预期工作的示例更新了我的答案。
  • 当我同时命名 Dto 和实体状态时,它似乎正在工作,而不是 DTO 上的 productstatus
  • 您的映射配置是否正确应用于您的_mapper?您是否为此使用依赖注入?我想知道这是否是问题所在。
猜你喜欢
  • 2016-03-05
  • 1970-01-01
  • 2012-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-07
  • 1970-01-01
  • 2016-09-09
相关资源
最近更新 更多