5

次のクラスが定義されています。

public class ImageIndexModel {
   public string Description {get; set;}
   public string InstrumentNumber {get; set;}
}

public class ImageEditModel : ImageIndexModel {
    public int TotalCount = 0;
}

public class Clerk {  //This is actually a class defined by LinqToSql
    public string Description {get; set;}
    public string InstrumentNo {get; set;}
}

ここで、 でglobal.asax次のマッピングを定義しましたApplication_Start()

Mapper.CreateMap<ImageIndexModel, Clerk>()
   .ForMember(dest => dest.InstrumentNo,
              opt => opt.MapFrom(src => src.InstrumentNumber));

最後に、コントローラーの 1 つに、次のコードがあります。

var _existing = new Clerk();
var _default = new ImageEditModel() {
                 InstrumentNumber = "12345678", Description = "Test"
               };
Mapper.Map(_default, _existing);

コントローラーでアクションを初めて呼び出してこのマッピングを実行すると、すべてが正常に機能し、オブジェクトInstrumentNumberの に正しくマッピングされます。ただし、アクションが 2 回目に呼び出されると、マップされません。 確かに値がありますが、null のままです。InstrumentNoClerkInstrumentNoInstrumentNumberInstrumentNo

ここで何が起こっているのでしょうか?

4

1 に答える 1

1

私はかつて、マッピングが多すぎるという反対の問題を抱えていました。これは、他の理由である可能性があるため、ここで説明されているように mapper.reset() を呼び出すことで解決されました。おそらく、アプリケーション内の別の何かが、あなたの下からマッパーをリセットして、あなたが信じているはずのマッピングを解決しなくなっているのでしょう (そして、しばらくの間)? もう 1 つの質問の鍵は、Automapper はシングルトンであるため、コードの別の部分が、知らないうちにロードまたはレイト バインドされ、コードを汚す可能性があるということです。

于 2013-01-21T14:39:00.860 に答える