C# 无法使Automapper忽略属性

C# 无法使Automapper忽略属性,c#,automapper,C#,Automapper,我为automapper设置了以下内容: cfg.CreateMap<NewBuildBlockViewModel, NewBuildBlock>(); cfg.CreateMap<NewBuildBlockAreaViewModel, NewBuildBlockArea>() .ForMember(x => x.CreatedBy, opt => opt.Ignore()).ForMember(x => x.Cr

我为automapper设置了以下内容:

cfg.CreateMap<NewBuildBlockViewModel, NewBuildBlock>();
cfg.CreateMap<NewBuildBlockAreaViewModel, NewBuildBlockArea>()
                    .ForMember(x => x.CreatedBy, opt => opt.Ignore()).ForMember(x => x.Created, opt => opt.Ignore())
                    .ForMember(x => x.LastModifiedBy, opt => opt.Ignore()).ForMember(x => x.LastModified, opt => opt.Ignore());

如果在映射器配置中将创建的
标记为忽略,则自动映射器应有效地忽略它,而不向它们分配任何内容,CLR将仅使用它们的默认值初始化它们。由于DateTime是一个结构,它需要有一些值,因此它将被初始化为
default(DateTime)
,这是可能的最小日期时间。由于
CreatedBy
我不确定发生了什么,
string
是一种引用类型,因此它的默认值应该是
null
,您确定
CreatedBy
设置为空而不是
null
?映射到现有集合时,首先清除目标集合。如果这不是您想要的,请查看AutoMapper.Collection。我应该指出,我输入ignore是为了解决问题,但在得到相同结果之前和之后(顺便说一句,我认为CreatedBy设置为null)。当我周一回来的时候,我会看看Automapper.Collection。@Lucian Bargaoanu Automapper.Collection是正确的答案很高兴知道:)
public class NewBuildBlockViewModel
{
    public NewBuildBlockViewModel()
    {
        NewBuildBlockArea = new List<NewBuildBlockAreaViewModel>();
    }

    public int NewBuildBlockId { get; set; }
    public int ContractId { get; set; }
    public IList<NewBuildBlockAreaViewModel> NewBuildBlockArea { get; set; }

}

public class NewBuildBlockAreaViewModel
{
    public int NewBuildBlockAreaId { get; set; }
    public int NewBuildBlockId { get; set; }

    [MaxLength(255)]
    public string Name { get; set; }

    public bool IsPlot { get; set; }
    public bool IsDeletable { get; set; }
}

public class NewBuildBlock : IAuditCreated, IAuditLastModified
{
    [Key] public int NewBuildBlockId { get; set; }

    public int ContractId { get; set; }
    public DateTime Created { get; set; }
    public string CreatedBy { get; set; }
    public DateTime? LastModified { get; set; }
    public string LastModifiedBy { get; set; }
    public List<NewBuildBlockArea> NewBuildBlockArea { get; set; }
}

public class NewBuildBlockArea : IAuditCreated, IAuditLastModified
{
    [Key] public int NewBuildBlockAreaId { get; set; }
    public int NewBuildBlockId { get; set; }

    [MaxLength(255)]
    public string Name { get; set; }

    public bool IsPlot { get; set; }
    public DateTime Created { get; set; }
    public string CreatedBy { get; set; }
    public DateTime? LastModified { get; set; }
    public string LastModifiedBy { get; set; }
    public NewBuildBlock NewBuildBlock { get; set; }

    public override string ToString()
    {
        return Name;
    }
}
var originalNewBuild = this.SirUoW.NewBuildBlock.GetItem(                    
    x => x.BlockUPRN == blockUPRN && x.ContractId == contractId, x => 
    x.NewBuildBlockArea);

var newNewBuild = Mapper.Map(newBuildBlockViewModel, originalNewBuild);