首页 新闻 会员 周边

求解 AutoMapper映射类发生错误求解

0
悬赏园豆:20 [已解决问题] 解决于 2016-09-24 15:11

一个类是展示类:

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版本之后的版本中被移除调用求解 应该怎么处理

坚持的阳光的主页 坚持的阳光 | 初学一级 | 园豆:86
提问于:2016-09-15 17:12
< >
分享
最佳答案
0

试试不用静态配置,用实例配置,比如:

var config = new MapperConfiguration(cfg => cfg.CreateMap<A, B>());
var mapper = config.CreateMapper();
mapper.Map<List<B>>(list);
收获园豆:20
dudu | 高人七级 |园豆:31007 | 2016-09-15 20:13

问题的原因找到了,Mapper.Initialize()只能用1次,第2次会覆盖第1次的配置。
改为下面的写法就能解决问题:

var cfg = new MapperConfigurationExpression();
cfg.CreateMap<sysFunction, sysFunctionView>();
cfg.CreateMap<sysFunctionView, sysFunction>();
Mapper.Initialize(cfg);
dudu | 园豆:31007 (高人七级) | 2016-09-15 21:40

@dudu: 大神改用你的方法之后,我用的是最新的5.1.1版本的AutoMapper,

以前那个错误没有了,但是在:

public static sysFunctionView EntityMap(this sysFunction model)
{
//将一个实体转换成另外一个实体
return Mapper.Map<sysFunction, sysFunctionView>(model);
}

返回的时候报另外一个错误:

System.StackOverflowException”类型的未经处理的异常在 AutoMapper.dll 中发生,

这又是什么原因,求解

坚持的阳光 | 园豆:86 (初学一级) | 2016-09-15 22:20

@坚持的孤独: 这个问题我也不知道什么原因

dudu | 园豆:31007 (高人七级) | 2016-09-15 22:44

@dudu: 好吧,谢谢了 大神了,我先用以前的老版本吧,我现在用3.1.1是可以的 谢谢你了

坚持的阳光 | 园豆:86 (初学一级) | 2016-09-15 22:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册