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 を呼び出します。そのため、既に追加されているマッピングを次に使用しようとすると、initialize の呼び出しによってクリアされたため、存在しないというメッセージが表示されます。

于 2013-02-02T04:55:40.263 に答える