0

基本的にDateTime、「表面」にあるクラスと、別のクラスの複合プロパティ内のクラスの一部である別のクラスがあり、これらのタイプDateTime間で前後にマップしたいと考えています...DateTime

public class AModel {
    DateTime DateFrom { get;set; }
    DateTime DateThru { get;set; }
}  
public class BModel {
    ModelDateCollection DateFromClass { get;set; }
    ModelDateCollection DateThruClass { get;set; }
}  
public class ModelDateCollection {
    DateTime Date { get;set; }
    String Display { get; } // Example Readonly for Date Display
    DateTime FirstOfMonth { get; } // Another Example to extend Complex Class
}

私が使用しているマップの初期化のために:

CreateMap<BModel, AModel>()
            .ForMember(d => d.DateFrom, s => s.MapFrom(src => src.DateFromClass.Date))

そして、ご覧のとおり、 PropertyDateFromClass.Dateを destinationにマップしようとしていますDateFrom

また、他の方向にもマッピングするつもりです。

CreateMap<AModel, BModel>()
            .ForMember(d => d.DateFrom, s => s.MapFrom(src => new ModelDateCollection(src.DateFrom)))

以下の例外によると、これらの DateTime 値をそのまま前後にマップすることはできません。

タイプ 'System.DateTime' のオブジェクトをタイプ 'ModelDateCollection' にキャストできません。-> AModel を BModel にマップしようとしています AModel から BModel へのマッピング構成を使用しています タイプ 'AutoMapper.AutoMapperMappingException' の例外がスローされました。

助言がありますか?

4

1 に答える 1

0

わかりました...すべて解決しました。そもそも問題がよくわからなかったので、例が少しずれていることがわかりました。私のクラス定義でわかるように、DateFrom と DateFromClass は異なる名前を共有しています...まあ、私の例では、実際には同じ名前を持っていました...したがって、新しいクラス構造は次のようになります::

public class AModel { 
    DateTime DateFrom { get;set; } 
    DateTime DateThru { get;set; } 
}   
public class BModel { 
    ModelDateCollection DateFrom { get;set; } 
    ModelDateCollection DateThru { get;set; } 
}   
public class ModelDateCollection { 
    DateTime Date { get;set; } 
    String Display { get; } // Example Readonly for Date Display 
    DateTime FirstOfMonth { get; } // Another Example to extend Complex Class 
} 

これが決め手です...タイプが異なっていても、Automapper は最初に、ある名前のアイテムから同じ名前の一致するメンバーにマップしたいと考えています...タイプに関係なく! したがって、面倒な答えは、プロパティの名前を変更して、このマッピングを試みる場合です...現在、Automapper は名前とタイプを見てから、ブートストラッパーにカスタム ロジックを適用することを確認しません。

于 2012-08-28T18:40:07.053 に答える