2017-09-21 8 views
0

がスローされます。Mapper.Map typeMapがnullで、Mapper.Mapの2番目の呼び出しで例外 "タイプマップがありません"がスローされます。Automapper:Automapperを初期化した後、タイプマップが見つからない場合、2番目のマッピングでタイプマップ

var roleTest = Mapper.Map<Role, AppRole>(role); 
var mapped = Mapper.Configuration.FindTypeMapFor(typeof(Role), typeof(AppRole)); // here mapped is null 
var roleTestSecond = Mapper.Map<Role, AppRole>(role); // exception thrown "Missing type map" 

あなたは第2のマッピングが機能していないとタイプマップが欠落している理由を任意のアイデアを持っていますか:呼び出した後、次に

AutoMapper.Mapper.Initialize(cfg => 
       { 
        cfg.CreateMap<Role, AppRole>(); 
       }); 
       Mapper.AssertConfigurationIsValid(); 

私はマッピングを初期化してきましたか?何か不足していますか?

+0

これは実際のコードですか?あなたがここに投稿したものはその例外をスローしません。 – DavidG

+0

それが投げます。その私の実際のコード。 – Gamaboy

+0

ここで試してみるとスローしません... – DavidG

答えて

0

私の理解から、FindTypeMapForが何かを返すように設定を封印する必要があります。

オートマッパーにシールを呼び出すように設定してください。

AutoMapper.Mapper.Initialize(cfg => 
      { 
       cfg.CreateMap<Role, AppRole>(); 
      }); 
      Mapper.Configuration.Seal(); 
      Mapper.AssertConfigurationIsValid(); 
+0

私が知る限りではありません。シールは違いはありません。 – DavidG

+0

オートマッパーユニットテストでこのコメントを見た後でこれを提案しました: //封印された_typeMapCacheが埋め込まれていて、解決できるはずですTypeMap //シールされていない場合_typeMapCacheが空でnullを返す必要があります このコメントはその文脈から外れています。それがOPを助けるかどうか見てみましょう。 – NPhillips

+0

これが問題であっても、それは 'FindTypeMapFor'メソッドがnullを返すようにします。問題は例外をスローする次の行です。 – DavidG

1

私は静的なMapperで同じ問題がありました。私の解決策は、ConveriosnExtensionsのような静的クラスを作ることです。以下を参照してください:

 public static class DataConversionsExtensions 
    { 
     private static readonly IMapper Mapper; 

     static DataConversionsExtensions() 
     { 
      var configuration = new MapperConfiguration(cfg => 
      { 
       cfg.CreateMap<Field, DbField>(); 
       cfg.CreateMap<DbField, Field>(); }); 

      Mapper = new Mapper(configuration); 
     } 

     public static Field ToField(this DbField field) 
     { 
      return Mapper.Map<Field>(field); 
     } 

     public static DbField ToDbField(this Field field) 
     { 
      return Mapper.Map<DbField>(field); 
     } 
} 

、あなたが現在使用しているとあなたは非常に簡単に変換を使用することができますどの構成確信している方法:これもうまく全体のプロセスをカプセル化していないので、これ以上のコピー&ペースト

var field = dbfield.ToField(); 

コード

+0

私はこれを試してみる – Gamaboy

関連する問題