为调用方法提供的参数数量不正确

问题描述 投票:0回答:1

我正在使用最新版本的 Automapper 将通过 EF Core 自动创建的数据库中的模型映射到我自己的具有相同结构的模型。

EF 核心型号:

public partial class Language
{
    public int Id { get; set; }

    public string FullName { get; set; } = null!;
    public string Abbreviation { get; set; } = null!;
    public string Description { get; set; } = null!;
    public string DateFormat { get; set; } = null!;
    public string TimeFormat { get; set; } = null!;

    public virtual ICollection<About> Abouts { get; set; } = new List<About>();
    public virtual ICollection<Contact> Contacts { get; set; } = new List<Contact>();
    public virtual ICollection<PostsTranslation> PostsTranslations { get; set; } = new List<PostsTranslation>();
}

我自己的模型:

public class Language
{
    public int Id { get; set; }

    public string FullName { get; set; } = null!;
    public string Abbreviation { get; set; } = null!;
    public string Description { get; set; } = null!;

    public string DateFormat { get; set; } = null!;
    public string TimeFormat { get; set; } = null!;
}

但是我遇到了这个错误:

为调用方法“DatabaseProvider.Models.Language get_Item(Int32)”(参数“property”)提供的参数数量不正确

自动映射器代码:

public class MapperConfig
{
    public static Mapper InitializeAutomapper()
    {
        //Provide all the Mapping Configuration
        var config = new MapperConfiguration(cfg =>
        {
cfg.CreateMap<API.Language, DB.Language>()
    .ForMember(d => d.Id, opt => opt.MapFrom(s => s.Id))
    .ForMember(d => d.FullName, opt => opt.MapFrom(s => s.FullName))
    .ForMember(d => d.Abbreviation, opt => opt.MapFrom(s => s.Abbreviation))
    .ForMember(d => d.Description, opt => opt.MapFrom(s => s.Description))
    .ForMember(d => d.DateFormat, opt => opt.MapFrom(s => s.DateFormat))
    .ForMember(d => d.TimeFormat, opt => opt.MapFrom(s => s.TimeFormat));

cfg.CreateMap<List<API.Language>, List<DB.Language>>();

cfg.CreateMap<DB.Language, API.Language>()
    .ForMember(d => d.Id, opt => opt.MapFrom(s => s.Id))
    .ForMember(d => d.FullName, opt => opt.MapFrom(s => s.FullName))
    .ForMember(d => d.Abbreviation, opt => opt.MapFrom(s => s.Abbreviation))
    .ForMember(d => d.Description, opt => opt.MapFrom(s => s.Description))
    .ForMember(d => d.DateFormat, opt => opt.MapFrom(s => s.DateFormat))
    .ForMember(d => d.TimeFormat, opt => opt.MapFrom(s => s.TimeFormat));

cfg.CreateMap<List<DB.Language>, List<API.Language>>();
        });
        //Create an Instance of Mapper and return that Instance
        var mapper = new Mapper(config);
        return mapper;
       }
    }
}

调用代码:

private readonly Mapper _mapper;
private readonly DatabaseConnector _connector = new();
private readonly ILogger<DatabaseController> _logger;

public DatabaseController(ILogger<DatabaseController> logger)
{
    _mapper = MapperConfig.InitializeAutomapper();
    _connector = new DatabaseConnector();
    _logger = logger;
}

[HttpGet("GetLanguages")]
public IEnumerable<Language> GetLanguages()
{
    var dbList = _connector.Get<DB.Language>();
    var list = _mapper.Map<List<DB.Language>, List<Language>>(dbList);

    return list;
}

我该怎么办?

c# .net entity-framework-core automapper mapper
1个回答
0
投票

我找到了解决方案。如果您对“Item”或“name”属性有问题,只需将此行添加到映射器的配置中:

cfg.AllowNullCollections = true;
cfg.AddGlobalIgnore("Item");

它将解决您的问题。请记住!不要映射列表,仅在彼此之间映射单个项目!

© www.soinside.com 2019 - 2024. All rights reserved.