175

私はAutomapperフレームワークの初心者です。次のようにドメインクラスとDTOクラスがあります。

public class Employee
{
   public long Id {get;set;}
   public string Name {get;set;}
   public string Phone {get;set;}
   public string Fax {get;set;}
   public DateTime DateOfBirth {get;set;}
}

public class EmployeeDto
{
   public long Id {get;set;}
   public string FullName {get;set;}
   public DateTime DateOfBirth {get;set;}
}

注:クラスのプロパティ「Name」の名前は、クラスのプロパティ「 FullName」の名前Employeeと同じではありません。EmployeeDto

そして、これがEmployeeオブジェクトをマップするコードですEmployeeDto

Mapper.CreateMap<Employee, EmployeeDto>(); // code line (***)
EmployeeDto dto = Mapper.Map<Employee, EmployeeDto>(employee); 

私の質問は次のとおりです。Employee(ソースクラス)をEmployeeDto(宛先クラス)にマップする場合、マッピングルールを指定するにはどうすればよいですか?言い換えれば、上記のコード行(***)をどのように使用すればよいですか?

4

4 に答える 4

345

気にしないでください、私自身が解決策を見つけました:

Mapper.CreateMap<Employee, EmployeeDto>()
    .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.Name));
于 2013-02-08T17:43:47.320 に答える
14

Automapper 8.1以降を使用して、上記のコメントを更新されたアプローチにまとめるだけです...

var mapConfig = new MapperConfiguration(
   cfg => cfg.CreateMap<Employee, EmployeeDto>()
      .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.Name))
);

次に、mapConfigを使用してマッパーを作成します。

var mapper = mapConfig.CreateMapper();
于 2019-07-29T16:09:43.643 に答える
8

マッピング用のクラス属性を指定することもできます

https://docs.automapper.org/en/stable/Conventions.html#attribute-supportから

属性のサポート

AddMemberConfiguration().AddName<SourceToDestinationNameMapperAttributesMember>(); *現在は常にオンになっています

プロパティ/フィールドのSourceToDestinationMapperAttributeのインスタンスを検索し、ユーザー定義のisMatch関数を呼び出してメンバーの一致を検索します。

MapToAttributeは、指定された名前に基づいてプロパティと一致するものの1つです。

public class Foo
{
    [MapTo("SourceOfBar")]
    public int Bar { get; set; }
}
于 2020-03-13T15:30:51.117 に答える
3

2つのクラスがあることを考えると

public class LookupDetailsBO
    {
        public int ID { get; set; }

        public string Description { get; set; }

    }

そして他のクラスは

public class MaterialBO
    {
        [MapTo(nameof(LookupDetailsBO.ID))]
        public int MaterialId { get; set; }

        [MapTo(nameof(LookupDetailsBO.Description))]
        public string MaterialName { get; set; }

        public int LanguageId { get; set; }
    }

このようにして、通常、どのプロパティをフォローしているかがわかります。また、命名規則を確認しているので、ソースのプロパティ名を変更した場合。MapTo ()はエラーを促します

于 2020-08-03T07:28:05.160 に答える