首页 > 解决方案 > 有没有办法使用自动映射器从列表映射到标量属性?

问题描述

在我的业务层中,我有以下对象

class ParentClass
{
    // Parent class properties
    ChildClass PrimaryChild { get; set; }
    ChildClass SecondaryClass { get; set; }
}

class ChildClass
{
    //Child class properties
}

业务规则规定只有主要和次要孩子

在 DAL 中,尽管将其设置为标准的一对多关系是有意义的

class ParentEntity
{
    // Parent properties
    IEnumerable<ChildEntity> Children { get; set; }
}

class ChildEntity
{
    // Child properties

    bool IsPrimary { get; set; }

    int ParentId { get; set; }
    ParentEntity Parent { get; set; }
}

这既适用于数据库,又在业务规则发生变化的情况下提供了未来的灵活性。

这一切工作正常,但我发现自己手动映射业务层中的PrimaryChildSecondaryChild属性,而其他所有内容都由 automapper 映射。

有没有办法指示自动映射器进行这种映射?我没有任何运气找到遵循这种结构的示例。

标签: c#.net-coreautomapper

解决方案


据我所知,这不能隐含地完成。

即使存在隐式执行此操作的能力,也需要您明确指出:

  • 应该映射到列表中的属性
  • 如何IsPrimary根据这些属性中的哪一个来设置标志
  • (对于双向绑定)哪个列表元素应该映射到哪个属性

举一个简单的例子来说明它有多复杂:如果你的列表有几个孩子但没有一个被标记为主要的怎么办?你怎么会隐含地知道该怎么做?

一旦您已经编写了这些自定义逻辑位,您基本上已经重写了整个手动映射,并且框架除了执行您手动编写的步骤之外实际上不会做太多事情。

这将是一大堆代码,并没有真正为库的功能增加价值。


推荐阅读