AutoMapper语言 - Map(源,目的)通过配置用空值覆盖源的目的子对象



在。net 6 n层应用程序中,我想通过AutoMapper将DTO模型映射到ORM模型。由于我的ORM是如何设置的,所以目标对象不改变实例是很重要的。当我通过_mapper.Map(source, destination)而不是_mapper.Map<TDestination>(source)映射时,空子对象不会在目的地覆盖。

一个例子:

假设我定义了以下DTO模型:

public class DummyDto 
{
public ChildDto Child { get; set; }
public ChildDto Child2 { get; set; }
}
public class ChildDto 
{
public string SomeValue { get; set; }
}

和以下定义的ORM模型:

public class Dummy 
{
public Child Child { get; set; }
public Child Child2 { get; set; }
}
public class Child 
{ 
public string SomeValue { get; set; }
}
接下来,我设置了以下ORM模型:
var dummyOrm = new Dummy() 
{
Child = new Child() 
{
SomeValue = "Foo",
},
Child2 = new Child()
{
SomeValue = "Baz",
}, 
}

和以下DTO模型:

var dummyDto = new DummyDto() 
{ 
Child = new ChildDto() 
{
SomeValue = "updated",
},
Child2 = null,
}

之后,从DTO自动映射到ORM:

_mapper.Map(dummyDto, dummyOrm);

我可以看到AutoMapper的默认行为已经忽略了DTO的null子对象,dummyOrm看起来像这样:

{
"Child": {
"SomeValue": "updated",
},
"Child2": {
"SomeValue": "Baz",
}
}

而我希望看到Child2被null覆盖

{
"Child": {
"SomeValue": "updated",
},
"Child2": null
}

我已经找到了一个如何通过AfterMap解决这个问题的选项,但我想知道我是否可以通过MapperConfiguration配置我的映射器,使其作为默认行为无处不在?

原来这是AutoMapper的一个bug,将AutoMapper更新到12.0.1预发布版修复了这个问题。

最新更新