在使用AutoMapper时,把数据从VO—PO时显示如下错误,错误提示说在一对多关系中已将集合设置为EntityCollection,那么这个是为什么呢。
看下action中的代码,我们可以发现这是很常用的方法,
[HttpPost, ActionName("Create")] public ActionResult CreatePost(CreateResponseTextMessageView model) { if (ModelState.IsValid) { try { model.CreateTime = DateTime.Now.ToLocalTime(); var entity = Mapper.Map<ResponseTextMessage>(model); _unitOfWork.ResponseTextMessageRepository.Insert(entity); _unitOfWork.Save(); } catch (Exception ex) { ErrorNotification(ex.Message); //throw new Exception(ex.Message); } SuccessNotification("添加成功"); return RedirectToAction("Index"); } return View(model); }
通过AutoMapper将VO—PO保存到数据库中,可是为什么会出现错误了,之前报的错误是说在Mapper转换的时候问题,这个好解决,把其对应的转换给添加上,现在这个没有头绪了,下面是之前的domain中的代码。
/// <summary> /// 响应的文本消息 /// </summary> public class ResponseTextMessage : BaseEntity { public ResponseTextMessage() { this.RequestMessage = new Collection<RequestMessage>(); } /// <summary> /// 文本内容 /// </summary> public virtual string Content { get; set; } /// <summary> /// 响应消息分类 /// </summary> public virtual ResponseMsgType ResponseMsgType { get; set; } /// <summary> /// 一对多属性配置----相当于导航属性 /// </summary> public virtual ICollection<RequestMessage> RequestMessage { get; set; } }
仔细看它是说在基类中出错,那么我们就把基类打开,发现这里我已经在ctor中将其实例化了一遍了,要是在转换就会显示不能成功。那么我就将其取消就可以了,
/// <summary> /// 响应的文本消息 /// </summary> public class ResponseTextMessage : BaseEntity { public ResponseTextMessage() { // this.RequestMessage = new Collection<RequestMessage>(); } /// <summary> /// 文本内容 /// </summary> public virtual string Content { get; set; } /// <summary> /// 响应消息分类 /// </summary> public virtual ResponseMsgType ResponseMsgType { get; set; } /// <summary> /// 一对多属性配置----相当于导航属性 /// </summary> public virtual ICollection<RequestMessage> RequestMessage { get; set; } }
这样就可以了,原因就是我们之前说的那样。