gpt4 book ai didi

c# - Automapper map 属性

转载 作者:行者123 更新时间:2023-11-30 18:40:06 24 4
gpt4 key购买 nike

迁移到 v2.0 后我发现了这个问题

我尝试这样的 map 属性:

public class SurveyFormView
{
public MultiSelectList Statistics { get; set; }
}
public class SurveyForm
{

ICollection<Statistic> statistics = new List<Statistic>();
public virtual ICollection<Statistic> Statistics
{
get { return statistics; }
set { statistics = value; }
}
}


Mapper.CreateMap<SurveyForm, SurveyFormView>().
ForMember(x => x.Statistics,
m =>
m.MapFrom(x => new MultiSelectList(x.Statistics))).

当我使用映射时:model = Mapper.Map<SurveyForm, SurveyFormView>(item);我得到:

[ArgumentException: Type 'System.Web.Mvc.MultiSelectList' does not have a default constructor]
System.Linq.Expressions.Expression.New(Type type) +2741878
AutoMapper.<>c__DisplayClass1.<CreateCtor>b__0(Type t) in c:\dev\AutoMapper\src\AutoMapper\Internal\DelegateFactory.cs:142
System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory) +72
AutoMapper.DelegateFactory.CreateCtor(Type type) in c:\dev\AutoMapper\src\AutoMapper\Internal\DelegateFactory.cs:140
AutoMapper.Mappers.ObjectCreator.CreateObject(Type type) in c:\dev\AutoMapper\src\AutoMapper\Mappers\ObjectCreator.cs:47
AutoMapper.MappingEngine.AutoMapper.IMappingEngineRunner.CreateObject(ResolutionContext context) in c:\dev\AutoMapper\src\AutoMapper\MappingEngine.cs:362
AutoMapper.Mappers.EnumerableMapperBase`1.CreateDestinationObject(ResolutionContext context, Type destinationElementType, Int32 count, IMappingEngineRunner mapper) in c:\dev\AutoMapper\src\AutoMapper\Mappers\EnumerableMapperBase.cs:64
AutoMapper.Mappers.EnumerableMapperBase`1.Map(ResolutionContext context, IMappingEngineRunner mapper) in c:\dev\AutoMapper\src\AutoMapper\Mappers\EnumerableMapperBase.cs:21
AutoMapper.MappingEngine.AutoMapper.IMappingEngineRunner.Map(ResolutionContext context) in c:\dev\AutoMapper\src\AutoMapper\MappingEngine.cs:303

最佳答案

当您需要映射到没有无参数构造函数的目标类型时,您需要使用 ConstructUsing 而不是 MapFrom:

Mapper.CreateMap<ICollection<Statistic>, MultiSelectList>()
.ConstructUsing(c => new MultiSelectList(c));
Mapper.CreateMap<SurveyForm, SurveyFormView>();

如果您将源集合注册为 IEnumerable,它也会起作用:

Mapper.CreateMap<IEnumerable, MultiSelectList>()
.ConstructUsing(c => new MultiSelectList(c));

关于c# - Automapper map 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8817892/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com