我想将业务层中的所有映射注册到数据层,将数据层注册到业务层类就像我的业务层程序集加载一样。目前我正在使用静态类为我执行此任务:
public static class AutoMapperBootstrapper
{
public static void InitMappings()
{
Mapper.Initialize(a => a.AddProfile<MyProfile>());
}
}
但每次我使用Mapper.Map和配置文件中添加的映射进行调用时,仍然会说缺少类型映射信息。
我应该如何解决这个问题?
答案 0 :(得分:1)
应用程序启动时,Mapper.AddProfile
似乎没有调用。
试试这个,
在Global.asax.cs
[Application_Start
],
protected void Application_Start(object sender, EventArgs e)
{
Mapper.AddProfile<MyProfile>();
}
MyProfile
如下所示,
public class MyProfile : Profile
{
public override string ProfileName
{
get { return "Name"; }
}
protected override void Configure()
{
//// BL to DL
Mapper.CreateMap<BLCLASS, DLCLASS>();
//// and DL to BL
Mapper.CreateMap<DLCLASS, BLCLASS>();
}
}
答案 1 :(得分:0)
我不知道你是否已经得到了答案。您走在正确的轨道上,但不要使用Mapper.Initialize
。如果使用initialize,则清除所有现有映射,然后在初始化调用中添加这些映射。而只需在静态方法中调用AddProfile
。或者更好的是,只需在BL或DL类的构造函数中添加配置文件。
public static class AutoMapperBootstrapper
{
public static void AddMappings()
{
Mapper.AddProfile<MyProfile>();
}
}
简而言之,正在发生的事情是您在Global.asax
或您添加它们的任何位置添加Web层所需的映射。然后在第一次加载BL或DL时,您调用initialize来清除任何现有的映射。因此,下次使用已添加的映射时,会收到消息,表明它不存在,因为它已被初始化调用清除。