C# 如何在复杂类型中使用automapper
在视图的域模型中,我有以下对象作为属性的支持字段C# 如何在复杂类型中使用automapper,c#,automapper,C#,Automapper,在视图的域模型中,我有以下对象作为属性的支持字段 public class ModelProperty<T>// where t:struct { public T Value { get; set; } public string Description { get; set; } public string LabelName { get; set; } } 是否可以将值从源映射到目标。使用Automapper,我有以下映射设置 //note Src
public class ModelProperty<T>// where t:struct
{
public T Value { get; set; }
public string Description { get; set; }
public string LabelName { get; set; }
}
是否可以将值从源映射到目标。使用Automapper,我有以下映射设置
//note SrcObj is not an object but a namespace alias since the domain and business objects are of the same name
Mapper.CreateMap<SrcObj.Incident, Incident>()
.ForMember(ui => ui.TypeText.Value,
opt => opt.MapFrom(src => src.TypeText));
但我得到的异常表达式必须解析为顶级成员,而不是任何子对象的属性。在子类型或AfterMap选项上使用自定义解析器
我是automapper的新手,但在查看文档时,我正在处理的对象是否太复杂了,因为这里实际上有三种类型,而不是两种
如果可以处理这种类型的映射,那么如何处理
更新
根据Jimmy的建议,我已将代码更新如下:
Mapper.CreateMap<SrcObj.Incident, Incident>();
Mapper.CreateMap<string, ModelProperty<string>>()
.ConvertUsing(src => new ModelProperty<string> { Value = src });
Mapper.AssertConfigurationIsValid();
SrcObj.Incident viewModelDto = md.GenerateMockIncident(); //populate the business object with mock data
uibase = Mapper.Map<SrcObj.Incident, Incident>(viewModelDto);
代码执行,我没有得到任何异常,但是在业务对象中设置和返回的值仍然没有被分配给支持属性值,它仍然为null
我错过了什么
-干杯试试这个。。您需要提供到目标TypeText的ModelProperty对象映射
Mapper.CreateMap<Funky.Incident, Incident>()
.ForMember(ui => ui.TypeText,
opt => opt.MapFrom(src =>
new ModelProperty<string>
{
Value = src.TypeText
}));
对TypeCode属性映射执行相同的操作,以便映射所有字段
只有当每个成员的名称不同或类型名称不同时,才需要考虑每个成员映射。在这种情况下,在您给出提示之前,AutoMapper将很难将字符串转换为模型对象
请尝试映射类型代码。。我不知道ObjectBase等的属性,所以您需要检查那里是否也需要手动映射。试试这个。。您需要提供到目标TypeText的ModelProperty对象映射
Mapper.CreateMap<Funky.Incident, Incident>()
.ForMember(ui => ui.TypeText,
opt => opt.MapFrom(src =>
new ModelProperty<string>
{
Value = src.TypeText
}));
对TypeCode属性映射执行相同的操作,以便映射所有字段
只有当每个成员的名称不同或类型名称不同时,才需要考虑每个成员映射。在这种情况下,在您给出提示之前,AutoMapper将很难将字符串转换为模型对象
请尝试映射类型代码。。我不知道ObjectBase等的属性。因此,您需要检查那里是否也需要手动映射。更简单的方法是创建类型转换器:
Mapper.CreateMap<string, ModelProperty<string>>()
.ConvertUsing(src => new ModelProperty<string> { Value = src });
然后,每当AutoMapper看到string->ModelProperty时,您都会看到这个。您根本不必进行特定于成员的配置。更简单的方法是创建类型转换器:
Mapper.CreateMap<string, ModelProperty<string>>()
.ConvertUsing(src => new ModelProperty<string> { Value = src });
然后,每当AutoMapper看到string->ModelProperty时,您都会看到这个。您根本不必进行特定于成员的配置。这纠正了最初的异常,但我仍然没有看到映射到新对象的数据。看起来还有另一个问题。上面的映射从何而来?AutoMapper.AssertConfiguration验证就是这样,我看到了一个异常,现在它通知我找到了其他未映射的成员。我没有意识到我需要考虑每个成员,我假设每个定义的映射都将适用,如果发现其他成员,它们将被忽略。我是否可以假设,如果找到其他映射,它将不会映射对象?您需要考虑每个成员,仅当它们的名称不同或类型名称不同时。在这种情况下,在您给出提示之前,AutoMapper将很难将字符串转换为模型对象。您是否也尝试映射类型代码。。我不知道ObjectBase等的属性纠正了最初的异常,但我仍然没有看到映射到新对象的数据。看起来还有另一个问题。上面的映射从何而来?AutoMapper.AssertConfiguration验证就是这样,我看到了一个异常,现在它通知我找到了其他未映射的成员。我没有意识到我需要考虑每个成员,我假设每个定义的映射都将适用,如果发现其他成员,它们将被忽略。我是否可以假设,如果找到其他映射,它将不会映射对象?您需要考虑每个成员,仅当它们的名称不同或类型名称不同时。在这种情况下,在您给出提示之前,AutoMapper将很难将字符串转换为模型对象。您是否也尝试映射类型代码。。我不知道ObjectBase等的属性。我已经更新了我的问题。我尝试了类型转换器,该方法毫无例外地执行,但是没有从业务对象模型中的值为域中的模型分配任何值。关于如何解决此问题或确定其不分配原因的任何建议?我已更新了我的问题。我尝试了类型转换器,该方法毫无例外地执行,但是没有从业务对象模型中的值为域中的模型分配任何值。关于如何对此进行故障排除或确定其未分配的原因有何建议?我终于发现了未分配值的问题所在。我正在创建的属性是w
我在域模型中只定义了get和return,但没有setter。我在属性中添加了一个私有setter,现在正在应用映射。我最终发现了没有赋值的问题所在。我在域模型中创建的属性只定义了get和return,而没有setter。我在属性中添加了一个私有setter,现在正在应用映射