使用Automapper仅更新少量属性

3

我最近开始使用Automapper。我有一个拥有50个属性的大型数据库表格。 我想使用Automapper更新表格,但只有少数选定的属性将使用viewmodel传递。

为了让我的问题更简单,我编写了一个小型控制台程序。

internal class Person
{
    public string FirstName { get; set; }
    public string NickName { get; set; }
    public string LastName { get; set; }
}

internal class PersonContract
{
    public string FirstName { get; set; }
    public string NickName { get; set; }
    public string LastName { get; set; }
}
class Program
{
    static void Main(string[] args)
    {

        PersonContract Person1 = new PersonContract { NickName = "Dan", LastName = "Smith"  };
        Person Person2 = new Person { FirstName = "Robert", NickName = "Rob" };

        Mapper.CreateMap<PersonContract, Person>();


        Mapper.Map(Person1, Person2);

        Console.WriteLine(Person2.FirstName);
        Console.WriteLine(Person2.NickName);
        Console.WriteLine(Person2.LastName);

        Console.ReadLine();
    }
}

我的输出是 NULL 丹 史密斯

我原本期望的是 罗伯特 丹 史密斯

因为如果Person1没有传递“Firstname”,那么Person2应该保留旧值。 显然,我没有正确理解它。 有人能解释一下这个问题吗?并让我知道如何得到我期望的输出。

2个回答

3

默认情况下,Automapper会复制所有属性,无论它们是否为null,但你可以使用ForAllMembersCondition方法设置所有成员满足的条件。

在你的情况下,你可以检查IsSourceValueNull属性:

Mapper.CreateMap<PersonContract, Person>()
      .ForAllMembers(cfg => cfg.Condition(rc => !rc.IsSourceValueNull));

太好了!谢谢你。我知道一定有简单的方法可以做到这件事。 - viks

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接