一个类是展示类:
public partial class sysFunctionView
{
public int fID { get; set; }
public int mID { get; set; }
public string fName { get; set; }
public string fFunction { get; set; }
public string fPicname { get; set; }
public Nullable<int> fStatus { get; set; }
public int fCreatorID { get; set; }
public System.DateTime fCreateTime { get; set; }
public Nullable<int> fUpdateID { get; set; }
public System.DateTime fUpdateTime { get; set; }
public virtual sysMenusView sysMenus { get; set; }
public virtual ICollection<sysPermissListView> sysPermissList { get; set; }
}
一个类是EF链接数据库创建的类:
public partial class sysFunction
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public sysFunction()
{
this.sysPermissList = new HashSet<sysPermissList>();
}
public int fID { get; set; }
public int mID { get; set; }
public string fName { get; set; }
public string fFunction { get; set; }
public string fPicname { get; set; }
public Nullable<int> fStatus { get; set; }
public int fCreatorID { get; set; }
public System.DateTime fCreateTime { get; set; }
public Nullable<int> fUpdateID { get; set; }
public System.DateTime fUpdateTime { get; set; }
public virtual sysMenus sysMenus { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<sysPermissList> sysPermissList { get; set; }
}
我做映射的时候是:
Mapper.Initialize(x => x.CreateMap<sysFunction, sysFunctionView>());
Mapper.Initialize(x => x.CreateMap<sysFunctionView, sysFunction>());
然后给两个类添加一个扩展方法
public static sysFunctionView EntityMap(this sysFunction model)
{
// 将一个实体转换成另外一个实体
return Mapper.Map<sysFunction, sysFunctionView>(model);
}
public static sysFunction EntityMap(this sysFunctionView model)
{
//将一个实体转换成另外一个实体
return Mapper.Map<sysFunctionView, sysFunction>(model);
}
在映射的时候会报错:
Missing type map configuration or unsupported mapping
网上给出的解决方案是使用AutoMapper.Mapper.DynamicMap
但是这个在4.0版本之后的版本中被移除调用求解 应该怎么处理
试试不用静态配置,用实例配置,比如:
var config = new MapperConfiguration(cfg => cfg.CreateMap<A, B>());
var mapper = config.CreateMapper();
mapper.Map<List<B>>(list);
问题的原因找到了,Mapper.Initialize()只能用1次,第2次会覆盖第1次的配置。
改为下面的写法就能解决问题:
var cfg = new MapperConfigurationExpression();
cfg.CreateMap<sysFunction, sysFunctionView>();
cfg.CreateMap<sysFunctionView, sysFunction>();
Mapper.Initialize(cfg);
@dudu: 大神改用你的方法之后,我用的是最新的5.1.1版本的AutoMapper,
以前那个错误没有了,但是在:
public static sysFunctionView EntityMap(this sysFunction model)
{
//将一个实体转换成另外一个实体
return Mapper.Map<sysFunction, sysFunctionView>(model);
}
返回的时候报另外一个错误:
System.StackOverflowException”类型的未经处理的异常在 AutoMapper.dll 中发生,
这又是什么原因,求解
@坚持的孤独: 这个问题我也不知道什么原因
@dudu: 好吧,谢谢了 大神了,我先用以前的老版本吧,我现在用3.1.1是可以的 谢谢你了