C# 无法使Automapper忽略属性
我为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
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);