【发布时间】:2019-06-12 17:59:29
【问题描述】:
我正在我的模型和我的视图模型之间建立映射,并且我正在尝试从 ICollection 映射到派生自 List 的类
我尝试在我的 ListItemClassVM 和 ICollection 之间进行映射,但收到错误“参数类型不匹配”
选项一映射适用于此:
public class ParentVM
{
public List<ListItemClass> ListItemClasses { get; set; }
}
选项二映射不起作用:
public class ParentVM
{
public ListItemClassVM ListItemClasses { get; set; }
}
public ListItemClassVM : List<ListItemClass>
{
}
映射设置:
public ModelClass_ParentVM_Profile()
{
CreateMap<ModelClass, ParentVM>()
.ForMember(d => d.ListItemClasses, o => o.MapFrom(i => i.ModelCollection))
;
CreateMap<ParentVM, ModelClass>()
;
}
尝试设置映射,以便选项二将映射。
【问题讨论】:
-
如果你能帮忙的话,我会从
List<T>发给advise against deriving。 -
@John 你能解释一下为什么吗?当您必须扩展 List
时,从 List 派生是唯一可维护的解决方案。 -
@user 很大程度上是因为我觉得这样做通常是为了存储与列表项相关的信息。例如,Person/Jobs 关系不应表示为
public class Person: List<Job> { public string Name { get; set; } },因为 Person 不仅仅是工作列表。一个人可以有工作,但他们不是工作。诚然,OP 可能不会这样做,但这通常是人们所做的,正如链接帖子中@m-y 所建议的那样,如果 OP 真的想扩展它,OP 可以从 Collection 继承。 -
@John 好吧,我明白你的意思。
-
@john 感谢链接有趣的阅读不知道这可能会导致性能问题。我看到这个的主要原因是我的一个轻微误解我正在考虑制作一个 MVC 编辑器模板并认为 EditorFor Linked 在模型类型(它不是它的属性名称)上并且认为 List/Collection 给出了一个问题。现在我很好奇为什么 Automapper 认为这种设置与众不同。
标签: c# automapper