我正在使用AutoMapper v6.2.2通过model.compile()
扩展方法从Entity Framework v6.2模型映射到ViewModel对象。目标ViewModel类的属性之一是ProjectTo<T>()
,它是从源上声明为ObservableCollection<T>,
的属性映射而来的。
我的代码示例:
源对象
ICollection<T>
目标对象
namespace Model
{
public partial class Order
{
public virtual ICollection<Model.OrderLine> OrderLines { get; set; }
}
}
然后执行投影,我有以下代码行,它从我的实体框架上下文(由namespace ViewModel
{
public class Order
{
public ObservableCollection<ViewModel.OrderLine> OrderLines { get; set; }
}
}
表示)中查询所有Order。 ctx
是我的AutoMapper _mapCfgProvider
对象,它为MapperConfiguration
和Order
两个对象配置Model和ViewModel对象之间的映射:
OrderLine
上面的代码生成一个return ctx.Orders.ProjectTo<Order>(_mapCfgProvider);
并显示消息:“参数类型不匹配”。
我是否缺少映射配置中的某些内容以能够投影到目标System.ArgumentException
?如果我删除了ObservableCollection<T>?
调用,而是使用Mapper实例来执行该项目,则该项目可以正常运行& ProjectTo<T>()
正确投影到ICollection<T>
。
使用ObservableCollection<T>
的原因是允许服务层在ViewModel上使用其他过滤器,由于延迟加载,这些过滤器将允许在数据存储级别应用这些过滤器,因此,如果可能的话,我想使用ProjectTo<T>()
。
任何帮助将不胜感激。