Asp.net mvc 5 AutoMapper 6-如何创建忽略并映射对象列表的映射
我是AutoMapper的新手,在Stackoverflow和Github上我几乎找不到任何关于v6.0的内容。在这个问题上我需要帮助 我有两个实体:Asp.net mvc 5 AutoMapper 6-如何创建忽略并映射对象列表的映射,asp.net-mvc-5,entity-framework-6,ef-fluent-api,automapper-6,Asp.net Mvc 5,Entity Framework 6,Ef Fluent Api,Automapper 6,我是AutoMapper的新手,在Stackoverflow和Github上我几乎找不到任何关于v6.0的内容。在这个问题上我需要帮助 我有两个实体: public class DocFinanceiro { public int AutoId { get; set; } public virtual ICollection<QuitacaoDocFinan> QuitacoesDocFinan { get; set; } } public class Qu
public class DocFinanceiro
{
public int AutoId { get; set; }
public virtual ICollection<QuitacaoDocFinan> QuitacoesDocFinan { get; set; }
}
public class QuitacaoDocFinan
{
public int AutoId { get; set; }
public int DocFinanceiroId { get; set; }
public virtual DocFinanceiro DocFinanceiro { get; set; }
public decimal ValorTotal { get; set; }
}
}
公共类DocFinanceiro
{
public int AutoId{get;set;}
公共虚拟ICollection QuitacoesDocFinan{get;set;}
}
公共类Quitacodocfinan
{
public int AutoId{get;set;}
public int DocFinanceiroId{get;set;}
公共虚拟DocFinanceiro DocFinanceiro{get;set;}
公共十进制值总计{get;set;}
}
}
以及他的ViewModels:
public class DocFinanceiroViewModel
{
public DocFinanceiroViewModel()
{
ValorPago = QuitacoesDocFinan.Where(x => x.Cancelada == false).Sum(x => x.ValorTotal);
}
public virtual ICollection<QuitacaoDocFinanViewModel> QuitacoesDocFinan { get; set; }
public decimal ValorPago { get; set; }
}
public class QuitacaoDocFinanViewModel
{
public int AutoId { get; set; }
public int DocFinanceiroId { get; set; }
public virtual DocFinanceiroViewModel DocFinanceiro { get; set; }
public decimal ValorTotal { get; set; }
}
公共类DocFinanceiroViewModel
{
公共DocFinanceiroViewModel()
{
ValorPago=quitacosesdocfinan.Where(x=>x.Cancelada==false).Sum(x=>x.ValorTotal);
}
公共虚拟ICollection QuitacoesDocFinan{get;set;}
公共十进制值{get;set;}
}
公共类QuitaCoDocFinanViewModel
{
public int AutoId{get;set;}
public int DocFinanceiroId{get;set;}
公共虚拟DocFinanceiroViewModel DocFinanceiro{get;set;}
公共十进制值总计{get;set;}
}
以及DocFinanceiro和DocFinanceiroViewModel之间的映射:
public class DomainToViewModelMappingProfile : Profile
{
public DomainToViewModelMappingProfile()
{
CreateMap<DocFinanceiro, DocFinanceiroViewModel>().ForMember(x => x.ValorPago, y => y.Ignore())
.MaxDepth(3)
.PreserveReferences();
CreateMap<QuitacaoDocFinan, QuitacaoDocFinanViewModel>();
}
}
public类DomainToViewModelMappingProfile:Profile
{
公共领域OvidEWModelMappingProfile()
{
CreateMap().formMember(x=>x.ValorPago,y=>y.Ignore())
.MaxDepth(3)
.references();
CreateMap();
}
}
当我只设置这些属性中的一个时,此映射会起作用
.ForMember(x=>x.ValorPago,y=>y.Ignore())
或
.MaxDepth(1).PreserveReferences()
,但当我尝试两个时,会导致异常。我到处寻找,但没有成功
以及我进行映射的控制器:
var documentos = Mapper.Map<IEnumerable<DocFinanceiro>, IEnumerable<DocFinanceiroViewModel>>(*repository*);
var documentos=Mapper.Map(*repository*);
很抱歉,如果出错,我不知道该怎么办…您正在尝试在初始化之前访问DocFinanceiroViewModel构造函数中的QuitacoesDocFinan集合。您的DocFinanceiroViewModel应该是这样的:
public class DocFinanceiroViewModel
{
public virtual ICollection<QuitacaoDocFinanViewModel> QuitacoesDocFinan { get; set; }
public decimal ValorPago
{
get
{
return QuitacoesDocFinan.Where(x => x.Cancelada == false).Sum(x => x.ValorTotal);
}
}
}
公共类DocFinanceiroViewModel
{
公共虚拟ICollection QuitacoesDocFinan{get;set;}
公共十进制ValorPago
{
得到
{
返回quitacosesdocfinan.Where(x=>x.Cancelada==false).Sum(x=>x.ValorTotal);
}
}
}
谢谢你的回复,但我做了这个映射,只是没有提出问题。我将编辑并添加此代码。将异常详细信息和自动映射版本添加到已更改答案的描述中