关于 c#:Automapper – 使用嵌套视图模型映射视图模型

Automapper - mapping a viewmodel with nested viewmodels

我有一个包含 IList 视图模型的视图模型:

 public class MyCustomViewModel
    {
        public IList<ItemViewModel> Items { set; get; }
        public IList<PersonViewModel> Persons { set; get; }

        public MyCustomViewModel()
        {

        }
    }

在我的控制器的索引操作方法中,我无法弄清楚如何正确映射这种嵌套的视图模型。

通常我会这样做:

IList<Item> items= db.Items.ToList();
var viewModel = Mapper.Map<IList<ItemViewModel>>(item);

如何处理包含其他几个视图模型的视图模型?我一直在尝试分别创建每个视图模型的新实例,但我看不到如何将它们全部映射到我的自定义视图模型。

我不能将视图模型映射到其他视图模型,可以吗?

相关讨论

  • 如果您的视图模型相同,则它应该没有问题,否则您必须手动定义映射。
  • 试试这个 stackoverflow.com/questions/13348812/… 或 stackoverflow.com/questions/20270983/…

只要您为两种视图模型类型定义了映射,autoMapper 就会映射嵌套的视图模型。

例如,如果我有一个具有 ChildObjectViewmodel 类型属性的 ParentObjectViewModel,我需要确保我已经在它们之间构建了一个映射。 Automapper 将处理您的属性是 IList.

的事实

    Mapper.CreateMap<ParentObjectViewmodel, ParentDataObject>();
    Mapper.CreateMap<ChildObjectViewmodel, ChildDataObject>();

当然,如果您的属性名称与视图模型和数据对象不匹配,您需要将其指定给 Automapper。

编辑:
对于您的示例,听起来您只想能够映射子对象(属性)。所以你会使用:

  Mapper.CreateMap<ItemViewModel, Item>();

这将允许您从任何 ItemViewModel 类型自动映射到任何 Item 类型(包括这些对象的 ILists)。在 CreateMap 调用中,源对象类型位于左侧,目标类型位于右侧。如果要来回映射,只需调用两次 CreateMap 即可。

相关讨论

  • 这在我添加 ParentDataObject 时有效,但没有它是否可行?我在想拥有 ChildDataObjects 就足够了,因为我的 ParentObjectViewModel 只是我的自定义视图所需的不同模型的集合,并且没有自己的真实业务逻辑(它只是为了演示目的而存在)。一旦我澄清这一点,将接受你的回答:)
  • 这是否回答你的问题?

以上是关于 c#:Automapper – 使用嵌套视图模型映射视图模型的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>