asp.net-core - 如果对象为空,如何将 Automapper 9 配置为忽略对象属性,但如果不为空则映射
问题描述
我已经尝试了很多,但我找不到我真正想要的东西。这是我的情况:我有一个带有导航属性和 viewModel 的 EF-Core 实体:
public class SomeEntity
{
public Guid Id { get; set; }
public virtual NestedObject NestedObject { get; set; }
public DateTime Created { get; set; }
public DateTime Modified { get; set; }
}
public class SomeEntityViewModel
{
public Guid Id { get; set; }
public string NestedObjectStringValue { get; set; }
public int NestedValueIntValue { get; set; }
}
这是我的 CreateMap,即使没有设置 NestedObject-Property,它也会创建一个新的 NestedObject(条件似乎在这里不适用):
CreateMap<SomeEntityViewModel, SomeEntity>(MemberList.Source)
.ForPath(m => m.NestedObject.StringValue, opt =>
{
opt.Condition(s => s.Destination.NestedObject != null);
opt.MapFrom(m => m.NestedObjectStringValue);
});
如果 Properties 为 null,这可以避免创建新的 NestedObject,但如果不是,则不会映射 NestedObject 属性:
CreateMap<SomeEntityViewModel, SomeEntity>(MemberList.Source)
.ForMember(m => m.NestedObject, opt => opt.AllowNull());
如果设置了第二个 CreateMap,则不会映射 NestedObject-Properties,如果未设置 Properties,则首先创建一个新的 NestedObject。但是两者一起都不起作用。任何想法如何解决这个问题?
解决方案
删除ReverseMap()
,然后尝试使用 AutoMapper条件映射并使用ForPath
而不是ForMember
嵌套子对象属性:
CreateMap<SomeEntityViewModel, SomeEntity>()
.ForPath(
m => m.NestedObject.StringValue,
opt => {
opt.Condition(
s => s.DestinationMember != null && s.DestinationMember != ""
);
opt.MapFrom(s => s.NestedObjectStringValue);
}
);
对IntValue
.
更新
因此,如果NestedObject
为空,您不想将值映射SomeEntityViewModel
到它。如果NestedObject
不为空,则映射有效。
请参考下面使用的代码AfterMap
CreateMap<SomeEntityViewModel, SomeEntity>()
.ForMember(q => q.NestedObject, option => option.Ignore())
.AfterMap((src, dst) => {
if(dst.NestedObject != null)
{
dst.NestedObject.StringValue = src.NestedObjectStringValue;
}
});
推荐阅读
- java - 检查值是否已存在于 Firebase 中?
- python - 如何在网页抓取中仅获取数据(没有标签名称)
- javascript - 从用户获取输入,存储并记录该输入
- python - 从谷歌表中获取链接单元格的值
- java - 为什么我的方法没有返回任何东西?
- javascript - React Native Firestore 无限循环
- mysql - 用mysql实现分页(limit和offset)
- java - JavaFx 应用程序中的无效 SQL 命令
- javascript - 带有动态内容 javascript 的 Alert()
- mysql - 我想在mysql中拆分结果你能帮我吗?