一些无效参数使用Automapper构建错误映射

时间:2014-02-17 04:15:34

标签: asp.net-mvc-4 automapper

我是Automapper的新手,除了这个之外,我们能够解决过去的大多数映射错误。

当我将CaseInfo实体映射到CaseInfoEdit视图模型时,我在我的(HTTPGET)编辑控制器方法中出现错误,该模型表示我在下面的代码行中有一些无效参数。

var vModel = Mapper.Map<CaseInfo, CaseInfoEditViewModel>(editCase);

此映射问题在我使用此CaseInfoRepository.Get()语句返回包含Attorney实体之后开始。使用律师参考对象正确返回此查询的CaseInfo结果。

var editCase = unitOfWork.CaseInfoRepository.Get(c => c.CaseInfoID == id, includeProperties: "Attorney");

视图模型有一个外键AttorneyId和一个Attorney引用属性,这就是我认为映射失败的原因。 CaseInfo Entity和CaseInfoViewModel都完全相同。

public class CaseInfoEditViewModel
{
    public int CaseInfoID { get; set; }

    // a bunch of property sets and gets ...

    public int AttorneyId { get; set; }
    public virtual Attorney Attorney { get; set; }

为了纠正映射,我添加了ForMember设置源和目标到Attorney引用属性,这对映射问题没有帮助。任何有关映射参考属性的正确方法的帮助将不胜感激。

Mapper.CreateMap<CaseInfoEditViewModel, CaseInfo>()
              .ForMember(dst => dst.AttorneyId, opt => opt.MapFrom(src => src.AttorneyId))
              .ForMember(dst => dst.Attorney, opt => opt.MapFrom(src => src.Attorney))
              .ForMember(dst => dst.CaseInfoID, opt => opt.Ignore());

1 个答案:

答案 0 :(得分:0)

我已经找到了问题,这不是我在CreateMap中映射Attorney成员的方式是正确的。我的get语句返回的IEnumerable列表不正确。我改变了我查询数据的方式,这样就返回了一个实体并且映射问题得到了纠正。

var editCase = unitOfWork.CaseInfoRepository.GetByID(id);