7

以下のモデルがあり、ユーザーモデルにはロールのリストがあります。

public class User
{
    public string Username { get; set; }
    public List<Role> Roles { get; set; }
}

public class Role
{
    public Guid RoleID { get; set; }
    public string Name { get; set; }
    public string Value { get; set; }
}


public class UserSourceModel
{
    public string Username { get; set; }
    public List<RoleSourceModel> Roles { get; set; }
}

public class RoleSourceModel
{
    public string Name { get; set; }
    public string Value { get; set; }
}

マッパー:

 Mapper.CreateMap<UserSourceModel, User>();
            Mapper.CreateMap<RoleSourceModel, Role>()
                .ForMember(dest => dest.RoleID, opt => opt.Ignore());

RoleID をソースからマップしたくないので、これを無視して宛先からの値を保持することに言及しました。

ダミーデータ:

            //// data from UI
            UserSourceModel sourceData = new UserSourceModel
            {
                Username = "NewUser",
                Roles = new List<RoleSourceModel> { new RoleSourceModel { Name = "Admin", Value = "Admin" } }
            };

            //// data in database
            User destinationData = new User
            {
                Username = "UserInDB",
                Roles = new List<Role> { new Role { RoleID = Guid.NewGuid(), Name = "Staff", Value = "Staff" } }
            };

マッピングを試みました:

var userOutPut = Mapper.Map<UserSourceModel, User>(sourceData, destinationData);

ここに画像の説明を入力

RoleID は User モデル ( Guid.NewGuid()) に既に存在する値であると予想していましたが、空の Guid ( 00000000-0000-0000-0000-000000000000) を取得しています。

4

2 に答える 2

7

私にとっては List<> と UseDestinationValue() で作業しました

Mapper.CreateMap<UserSourceModel, User>();
Mapper.CreateMap<List<RoleSourceModel>, List<Role>>();
Mapper.CreateMap<RoleSourceModel, Role>()
    .ForMember(dest => dest.RoleID, opt => opt.UseDestinationValue());
于 2013-11-06T12:07:30.900 に答える