众所周知猫生猫,狗生狗,猫不可能生出狗来。同样的实体是一种强类型关系,经常会因类型写错而报错。无非是一点一点的排除找错,但是ViewModle中,你会去看吗?
有一种错误叫“AutoMapper.AutoMapperMappingException”类型的异常在AutoMapper.dll 中发生,但未在用户代码中进行处理”,也可以叫“Missingtype map configuration or unsupported mapping”,反正就是类型不匹配。
这是StaticContentBll中的一个方法,类型是StaticContent的,但报错的时候,显示的类型是Category类型。纳尼?
/// <summary>
/// 查询静态内容(公用)
/// </summary>
/// <param name="CategoryID">根据类别查询静态内容(公用)</param>
/// <returns>返回静态内容ViewModle</returns>
public List<StaticContentViewModel> QueryStaticContent(StaticContentViewModel enCategory, int pageSize, int pageIndex, out int total )
{
//调用底层, 查询StaticContent的集合泛型
List<StaticContent> listStaticContent = this.CurrentDal.LoadPageItems(pageSize, pageIndex, out total,p => p.CategoryID == enCategory.CategoryID, p => p.TimeStamp, false).ToList();
//创建转换规则,转换实体
Mapper.CreateMap<StaticContent, StaticContentViewModel>();
var listStaticContentVM = Mapper.Map<List<StaticContent>, List<StaticContentViewModel>>(listStaticContent);
//返回查询结果
return listStaticContentVM;
}
最后敲定的错误在ViewModle中。ViewModle的东西一般是从Model直接导出的,包括各属性以及外键,如下:
/// <summary>
/// 静态内容表,存放机构设置、单位简介等
/// </summary>
[DataContract]
public partial class StaticContentViewModel
{
/// <summary>
/// 静态内容ID
/// </summary>
[DataMember]
public System.Guid StaticContentID { get; set; }
/// <summary>
/// 静态内容题目
/// </summary>
[DataMember]
public string StaticContentTitle { get; set; }
/// <summary>
/// 静态内容内容
/// </summary>
[DataMember]
public string StaticContentContent { get; set; }
/// <summary>
/// 图片
/// </summary>
[DataMember]
public string Images { get; set; }
/// <summary>
/// 时间戳
/// </summary>
[DataMember]
public System.DateTime TimeStamp { get; set; }
/// <summary>
/// 添加人ID
/// </summary>
[DataMember]
public System.Guid UserGUID { get; set; }
/// <summary>
/// 类别ID
/// </summary>
[DataMember]
public System.Guid CategoryID { get; set; }
/// <summary>
/// 导航属性-类别
/// </summary>
public virtual CategoryViewModel Category { get; set; }
/// <summary>
/// 导航属性-用户信息
/// </summary>
public virtual UserInfoViewModel UserInfo { get; set; }
}
ViewModle中都是业务领域的数据,不应该放外键了,放了外键就等于引入另一个类型,所以最后类型都混了。额我是这么理解的。