我是使用automapper的新手,我想在我的项目中实现它。我试图将多个模型从EF映射到asp项目中的单个视图模型,但在此之前我遇到了如下问题。
我尝试按照以下方式提供解决方案:
但没有任何成功。 我正在使用最近的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;
}
}
但非可以解决问题。 如果有人能帮助我,那将是非常有帮助的。 谢谢。
答案 0 :(得分:3)
以下是我在项目中亲自实施AutoMapper
的方式:
首先创建一个MappingConfig
类,通常我将它放在App_Code
文件夹中。
在我的项目中,我可能在系统中有不同的部分,按部分我的意思是不同Areas
或者某种程度上应用程序需要在User Management
,Meetings
等不同部分进行逻辑分隔。无论你有什么......
因此,从我可以在逻辑部分划分系统的那一刻起,我为每个部分创建了一个配置文件类:
以下是个人资料类的示例:
public class GeneralMappingConfigProfile : Profile
{
public GeneralMappingConfigProfile()
{
CreateMap<sourceObject, destinationObject>()
.ForMember(d => d.X, o => o.MapFrom(s => s.Y))
}
}
上面的类是一般映射的示例,但如果它足够大,可以将其区分为一个部分,那么您可能会有一个会议配置文件类。
然后在我的配置类中,我配置所有配置文件类如下:
public class MappingConfig
{
public static void RegisterMappings()
{
Mapper.Initialize(config =>
{
config.AddProfile<GeneralMappingConfigProfile>();
config.AddProfile<MeetingsMappingConfigProfile>();
//etc
});
}
}
在global.asax
我调用静态方法如下:
MappingConfig.RegisterMappings();
然后我可以在每个配置文件中创建尽可能多的映射:
我刚刚编写了所有这些代码,因此您可以更好地组织代码......
对于您的情况,可能会有很多可能导致此错误的事情,但请参阅此问题here。你能不能在这里分享更多的代码,因为我希望看到MeetingViewModels
模型和动作代码,因为从数据库中获取tblMeeting对象的方式一定有问题。