2

我想将我的业务层中的所有映射注册到数据层,并将数据层注册到业务层类,就像我的业务层程序集加载一样。目前我正在使用一个静态类来为我完成这项任务:

public static class AutoMapperBootstrapper
{
    public static void InitMappings()
    {
        Mapper.Initialize(a => a.AddProfile<MyProfile>());
    }
}

但是每次我用 Mapper.Map 和配置文件中添加的映射进行调用时,它仍然说缺少类型映射信息。

我应该如何解决这个问题?

4

2 回答 2

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>();
    }
}
于 2012-11-13T05:17:35.843 回答
0

我不知道你是否已经得到了这个问题的答案。你在正确的轨道上,但不要使用Mapper.Initialize. 如果您使用初始化,您将清除所有现有映射,然后在初始化调用中添加这些映射。相反,只需调用AddProfile您的静态方法。或者更好的是,只需在 BL 或 DL 类的构造函数中添加配置文件。

public static class AutoMapperBootstrapper
{
    public static void AddMappings()
    {
        Mapper.AddProfile<MyProfile>();
    }
}

因此,简而言之,正在发生的事情是您正在添加 Web 层所需的任何映射,Global.asax或者添加它们的任何位置。然后第一次加载 BL 或 DL 时,您将调用 initialize 来清除所有现有映射。因此,下次您使用已添加的映射时,您会收到消息说它不存在,因为它已被初始化调用清除。

于 2013-02-02T04:55:40.263 回答