3

我试图从一个对象映射到另一个具有公共只读 Guid Id 的对象,我想忽略它。我试过这样:

Mapper.CreateMap<SearchQuery, GetPersonsQuery>()
              .ForMember(dto => dto.Id, opt => opt.Ignore());

这似乎失败了,因为 Id 是只读的:

AutoMapperTests.IsValidConfiguration threw exception: 
System.ArgumentException: Expression must be writeable

有没有办法解决?

4

1 回答 1

1

我认为 AutoMapper 不支持 ReadOnly 字段。我可以让它工作的唯一方法是用一个只有一个 getter 的属性来包装 readonly 字段:

class Program
{
    static void Main()
    {
        Mapper.CreateMap<SearchQuery, GetPersonsQuery>();

        var source = new SearchQuery {Id = Guid.NewGuid(), Text = Guid.NewGuid().ToString() };

        Console.WriteLine("Src: id = {0} text = {1}", source.Id, source.Text);

        var target = Mapper.Map<SearchQuery, GetPersonsQuery>(source);

        Console.WriteLine("Tgt: id = {0} text = {1}", target.Id, target.Text);

        Console.ReadLine();
    }
}

internal class GetPersonsQuery
{
    private readonly Guid _id = new Guid("11111111-97b9-4db4-920d-2c41da24eb71");

    public Guid Id { get { return _id; } }
    public string Text { get; set; }
}

internal class SearchQuery
{
    public Guid Id { get; set; }
    public string Text { get; set; }
}
于 2014-01-08T06:42:01.387 回答