繁体   English   中英

将数据库模型从实体映射到视图模型时,Automapper缺少类型

[英]Automapper missing type when mapping database model from entity to viewmodel

我是使用自动映射器的新手,我想在我的项目中实现它。 我试图将多个模型从EF映射到asp项目中的单个viewmodel,但是在这样做之前,我遇到了以下问题。 在此处输入图片说明

我尝试遵循以下提供的解决方案:

  1. 自动映射器缺少类型映射配置或不支持的映射
  2. Automapper是否缺少类型映射配置或不支持的映射?

但没有成功。 我正在使用最近的自动映射器。 我尝试了各种方法来创建地图,例如

    config.CreateMap<tblMeeting, MeetingViewModels>()
            .ForMember(dest => dest.meetingDetails, input => input.MapFrom(i => new tblMeeting
            {
                meetingId = i.meetingId,
                meetingType = i.meetingType??null,
                startTime = i.startTime,
                finishTime = i.finishTime,
                meetingDate = i.meetingDate,
                meetingNotes = i.meetingNotes,
                meetingVenue = i.meetingVenue
            }));

和这个

            config.CreateMap<tblMeeting, MeetingViewModels>()
           .ForMember(dest => dest.meetingDetails.meetingId, opt => opt.MapFrom(s => s.meetingId))
            .ForMember(dest => dest.meetingDetails.startTime,
                        opt => opt.MapFrom((s => s.startTime)))
            .ForMember(dest => dest.meetingDetails.finishTime,
                        opt => opt.MapFrom(s => s.finishTime))
            .ForMember(dest => dest.meetingDetails.meetingType,
                        opt => opt.MapFrom(s => s.meetingType ?? null))

            .ForMember(dest => dest.meetingDetails.meetingDate,
                        opt => opt.MapFrom(s => s.meetingDate))
            .ForMember(dest => dest.meetingDetails.meetingVenue,
                        opt => opt.MapFrom(s => s.meetingVenue))
            .ForMember(dest => dest.meetingDetails.meetingNotes,
                        opt => opt.MapFrom(s => s.meetingNotes));


        });

这也是

             config.CreateMap<tblMeeting, MeetingViewModels>().ConvertUsing<test();

    public class test : ITypeConverter<tblMeeting, MeetingViewModels>
    {


        public MeetingViewModels Convert(tblMeeting source, MeetingViewModels destination, ResolutionContext context)
        {
            MeetingViewModels m = new MeetingViewModels();

            m.meetingDetails.meetingId = Guid.Parse(source.meetingType.ToString());
            m.meetingDetails.meetingNotes = source.meetingNotes;
            m.meetingDetails.meetingType = Guid.Parse(source.meetingType.ToString());
            m.meetingDetails.meetingDate = source.meetingDate;
            m.meetingDetails.startTime = source.startTime;
            m.meetingDetails.finishTime = source.finishTime;
            m.meetingDetails.meetingVenue = source.meetingVenue;

                return m;
        }
    }

但非能解决问题。 如果有人可以帮助我,那将有很大的帮助。 谢谢。

这是我个人在项目中实现AutoMapper

首先创建一个MappingConfig类,通常我将其放在App_Code文件夹中。

在我的项目中,我可能在系统中有不同的部分,每个部分的意思是不同的Areas或者某种程度上需要在逻辑上将应用程序分成不同的部分,例如User ManagementMeetings等,无论您在哪里...

因此,从可以将系统划分为逻辑部分的那一刻起,我为每个部分创建一个配置文件类:

这是配置文件类的示例:

public class GeneralMappingConfigProfile : Profile
{ 
    public GeneralMappingConfigProfile()
    {
        CreateMap<sourceObject, destinationObject>()
                .ForMember(d => d.X, o => o.MapFrom(s => s.Y))
    }
}

上面的类是常规映射的示例,但是如果它足够大以至于可以作为一个部分进行区分,则可能有一个Meetings概要文件类。

然后在我的配置类中,如下配置所有配置文件类:

public class MappingConfig
{
    public static void RegisterMappings()
    {
        Mapper.Initialize(config =>
        {
            config.AddProfile<GeneralMappingConfigProfile>(); 
            config.AddProfile<MeetingsMappingConfigProfile>();
            //etc
        });
    }
}

global.asax我调用静态方法,如下所示:

MappingConfig.RegisterMappings();

然后,我可以在每个配置文件中创建尽可能多的映射:

我只是编写了所有这些代码,所以您可以更好地组织代码...

对于您的情况,可能是很多事情可能导致此错误,但是请在此处参考此问题。 您是否可以在这里共享更多代码,因为想要查看MeetingViewModels模型和操作代码,因为从数据库获取tblMeeting对象的方式一定存在问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM