Jos*_*hit 2 automapper entity-framework-core .net-core asp.net-core
我已经尝试了很多,但我找不到我真正要找的东西。这是我的情况:我有一个带有导航属性和视图模型的 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; }
}
Run Code Online (Sandbox Code Playgroud)
这是我的 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);
});
Run Code Online (Sandbox Code Playgroud)
如果 Properties 为 null,则避免创建新的 NestedObject,但如果不是,则不会映射 NestedObject 属性:
CreateMap<SomeEntityViewModel, SomeEntity>(MemberList.Source)
.ForMember(m => m.NestedObject, opt => opt.AllowNull());
Run Code Online (Sandbox Code Playgroud)
如果设置了第二个 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);
}
);
Run Code Online (Sandbox Code Playgroud)
对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;
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1688 次 |
| 最近记录: |