gpt4 book ai didi

asp.net-mvc - 没有 CreateMap 的简单转换的 Automapper 错误

转载 作者:行者123 更新时间:2023-12-04 21:50:27 25 4
gpt4 key购买 nike

我有这两个模型:

public class SiteSettingsViewModel
{
public decimal SubscriptionFee { get; set; }
}

public class SiteSettings
{
public decimal SubscriptionFee { get; set; }
}

和代码:
var model = Mapper.Map<SiteSettings, SiteSettingsViewModel>(settingService.GetSettings());

这会引发以下错误:

Trying to map WebApp1.Domain.Site.SiteSettings to WebApp1.WebUI.ViewModel.SiteSettingsViewModel. Missing type map configuration or unsupported mapping. Exception of type 'AutoMapper.AutoMapperMappingException' was thrown.



为什么我需要放代码:
Mapper.CreateMap<SiteSettings, SiteSettingsViewModel>();

对我来说,这似乎是我在写猴子代码。这不是必需的。

为什么 1 行不起作用?

最佳答案

一个原因是它对于需要定义更具体行为的更复杂的映射场景很有用。例如(来自 CodePlex ):

Mapper.CreateMap<CalendarEvent, CalendarEventForm>()
.ForMember(dest => dest.EventDate, opt => opt.MapFrom(src => src.EventDate.Date))
.ForMember(dest => dest.EventHour, opt => opt.MapFrom(src => src.EventDate.Hour))
.ForMember(dest => dest.EventMinute, opt => opt.MapFrom(src => src.EventDate.Minute));

像您正在做的简单映射的另一个选择是制作一个通用映射器来为您处理 CreateMap 调用,如下所示:
public interface IMapper<T1, T2>
{
T1 Map(T2 source);
}

public class Mapper<T1, T2> : IMapper<T1, T2> where T1 : class where T2 : class
{
public Mapper()
{
Mapper.CreateMap<T2, T1>();
}

public T1 Map(T2 source)
{
return Mapper.Map<T2, T1>(source);
}
}

然后你可以直接实例化它们,比如:
var mapper = new Mapper<SiteSettings, SiteSettingsViewModel>();

或者注册它们以注入(inject)您的 Controller ,或者您计划使用它们的任何其他地方。希望有帮助。

关于asp.net-mvc - 没有 CreateMap 的简单转换的 Automapper 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5737505/

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