c# - 有没有办法使用自动映射器从列表映射到标量属性?
问题描述
在我的业务层中,我有以下对象
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; }
}
这既适用于数据库,又在业务规则发生变化的情况下提供了未来的灵活性。
这一切工作正常,但我发现自己手动映射业务层中的PrimaryChild
和SecondaryChild
属性,而其他所有内容都由 automapper 映射。
有没有办法指示自动映射器进行这种映射?我没有任何运气找到遵循这种结构的示例。
解决方案
据我所知,这不能隐含地完成。
即使存在隐式执行此操作的能力,也需要您明确指出:
- 应该映射到列表中的属性
- 如何
IsPrimary
根据这些属性中的哪一个来设置标志 - (对于双向绑定)哪个列表元素应该映射到哪个属性
举一个简单的例子来说明它有多复杂:如果你的列表有几个孩子但没有一个被标记为主要的怎么办?你怎么会隐含地知道该怎么做?
一旦您已经编写了这些自定义逻辑位,您基本上已经重写了整个手动映射,并且框架除了执行您手动编写的步骤之外实际上不会做太多事情。
这将是一大堆代码,并没有真正为库的功能增加价值。
推荐阅读
- flutter - 当一些数据从 Flutter 中的 api 获取时,如何管理对徽章的计数?
- java - 为什么运行 SpringBootTest 时没有设置限定符?
- android - 逆向smali代码的Frida调用函数(Android)
- mongodb - 容器中的 MongoDB 作为单节点副本集“ENOENT:没有这样的文件或目录”错误
- javascript - 如何将工具提示绑定到传单 L.Circle 的边缘?
- graphql - Polkadot 网络项目的 TheGraph 子图
- reactjs - 多个组件文件连接到redux
- chartjs-2.6.0 - Charjs 哪个选项用于绘制雷达或极地
- amazon-web-services - 在 aws kubernetes 中创建节点组时出错
- javascript - 如何使用 AsyncStorage 将项目保存在一个屏幕中,然后将其显示在另一个屏幕中