我是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());
答案 0 :(得分:0)
我已经找到了问题,这不是我在CreateMap中映射Attorney成员的方式是正确的。我的get语句返回的IEnumerable列表不正确。我改变了我查询数据的方式,这样就返回了一个实体并且映射问题得到了纠正。
var editCase = unitOfWork.CaseInfoRepository.GetByID(id);