c# - 如何在 AutoMapper 中解析多属性映射的源成员?
问题描述
我有 DO 和 DTO 课程:
public class DO
{
public int Property1 { get; set; }
public int Property2 { get; set; }
}
public class DTO
{
public int MappedProperty1 { get; set; }
public int MappedProperty2 { get; set; }
}
上述类的映射注册如下所示。
// From DO to DTO:
configuration.CreateMap<DO, DTO>()
.ForMember(d => d.MappedProperty1, o => o.MapFrom(s => s.Property1))
.ForMember(d => d.MappedProperty2, o => o.MapFrom(s => s.Property1 + s.Property2));
// From DTO to DO:
configuration.CreateMap<DTO, DO>()
.ForMember(d => d.Property1, o => o.MapFrom(s => s.MappedProperty1))
.ForMember(d => d.Property2, o => o.MapFrom(s => s.MappedProperty1 - s.MappedProperty2));
在代码的其他地方,我需要在映射中获取目标属性名称。我目前正在这样做:
var map= mapper.ConfigurationProvider.FindTypeMapFor<DTO, DO>();
var property = map.GetPropertyMaps().First(f => f.SourceMember == typeof(DTO).GetProperty("MappedProperty1"));
var name = property.DestinationProperty.Name;
这适用于MappedProperty1
. 但是,它不起作用,MappedProperty2
因为有两个属性参与映射。相反,我收到错误消息:
“序列不包含匹配元素”。
我还尝试了以下而不是First
过滤器,在调试中我可以看到列表中的计数为零。
var map= mapper.ConfigurationProvider.FindTypeMapFor<DTO, DO>();
var property = map.GetPropertyMaps().Where(w => w.SourceMember == typeof(DTO).GetProperty("MappedProperty2")).ToList();
如何为多属性映射实现此源名称解析?
解决方案
推荐阅读
- r - 如何将 r ggplot 图存储为 html 代码片段
- http - 不安全的 HTTP cookie
- vba - 为什么 VBA 运行速度很慢?
- python - 如何获取 HTML 用户输入并通过 Python 和 SQL 进行查询?
- c++ - 非常量调用 const 成员函数失败,只读位置 C++
- typescript - ADAL5 Angular,当用户未授权时,URL 中出现循环错误而不是显示 UI (AADSTS50105)
- python - Python MySQL 解压来自 cur.fetchall() 的结果
- python - 检查相同数字的相等性返回 False
- reactjs - Firestore:enablePersistence() 然后将 redux 与离线数据库一起使用?
- java - Spring Kafka-何时在后台调用 Consumer.poll()?