c# - 如何告诉 AutoMapper 使用 "pass by reference?"

标签 c# automapper

默认情况下,automapper 根据目的地的类型创建一个新对象:

public void Doit( Person personMissingStuff )
{
    PersonTemplate template = _personDao.GetPersonTemplate(1);
    Mapper.CreateMap<PersonTemplate, Person>();
    Person basePerson = Mapper.Map<Person>( template );
    Mapper.CreateMap<Person, Person>();
    Person completePerson = 
       Mapper.Map<Person, Person>( basePerson, personMissingStuff );
    ...
}

我没有得到一个completePerson,而是再次得到一个basePerson。我如何告诉 AutoMapper 通过引用而不是通过值来运行映射?

最佳答案

Mapper.Map(source, dest) 实际上返回目标对象,在您的情况下它将是 personMissingStuff

话虽如此,假设您只想填充目标中的空属性,则需要正确配置映射,并且在目标属性有值时不映射。

以下示例对类属性执行此操作。对于值属性,您可能需要进行额外的配置。该示例使用 NUnit 和 SharpTestsEx:

[TestFixture]
public class LoadIntoInstance
{
    public class Template
    {
        public string Name { get; set; }
    }

    public class Person
    {
        public string Name { get; set; }
        public string OtherData { get; set; }
    }        

    [Test]
    public void Should_load_into_instance()
    {
        Mapper.CreateMap<Template, Person>()
            .ForMember(d=>d.OtherData, opt=>opt.Ignore());
        Mapper.CreateMap<Person, Person>()
            .ForAllMembers(opt=>opt.Condition(ctx=>ctx.DestinationValue==null));
        Mapper.AssertConfigurationIsValid();

        var template = new Template {Name = "template"};
        var basePerson = Mapper.Map<Person>(template);

        var noNamePerson = new Person {OtherData = "other"};

        var result = Mapper.Map(basePerson, noNamePerson);

        result.Should().Be.SameInstanceAs(noNamePerson);
        result.Satisfy(r =>
                       r.Name == "template" &&
                       r.OtherData == "other");
    }
}

关于c# - 如何告诉 AutoMapper 使用 "pass by reference?",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16822679/

相关文章:

c# - Xaml : Nested properties are not supported: DataGridTemplateColumn. 单元格模板。

c# - 如何在 C# 中从 IDataReader 写入 xml 文件

c# - Automapper 中参数的条件映射

automapper - Entity Framework 核心 2 : Easily update an object and it's relations

c# - ASP.NET C# 从 Paypal 获取 referer

c# - 通过三个调用在Elastic Search中使用索引策略更新文档效率不高

c# - 如何将一张图片叠加到另一张图片上?

c# - 如何映射具有延迟加载属性的实体(不会导致它们加载)?

c# - 我应该把我的 DTO 放在整洁的架构中的什么地方?

entity-framework - 使用 Automapper 实现多对多到 DTO