
问题描述
我尝试了很多,但找不到我真正要找的东西.这是我的情况:我有一个带有导航属性和视图模型的 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);
});
如果属性为空,则避免创建新的 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;
}
});
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)
评价
排名
9
文章
115
粉丝
5
评论
5
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术