在對我的看法我的域模型我反過來對象被表示爲下面的對象是作爲後備字段爲我的屬性如何使用automapper複雜類型
public class ModelProperty<T>// where t:struct
{
public T Value { get; set; }
public string Description { get; set; }
public string LabelName { get; set; }
}
:
public partial class Incident : BaseEntityModel
{
private ModelProperty<string> typeCode = new ModelProperty<string>{Description="1-C", LabelName = "Type Code"};
private ModelProperty<string> typeText = new ModelProperty<string>{Description="1-C", LabelName = "Type Text"};
public ModelProperty<string> TypeCode { get {return typeCode;}}
public ModelProperty<string> TypeText { get {return typeText;}}
}
業務對象(我的來源)並不複雜。
public partial class Incident : ObjectBase
{
public string TypeCode { get; set; }
public string TypeText { 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,但在看文檔是我工作的對象太複雜(基於這樣的想法,這裏真的有三種類型,而不是兩個)?
如果可以處理這種類型的映射,這是如何完成的?
更新
基於從吉米的建議,我已經更新了我的代碼如下:
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);
的代碼執行和我沒有得到任何異常,但是正在被設定的值返回的業務對象仍然沒有被分配到後臺屬性Value
它仍然爲空。
我錯過了什麼?
-cheers
我終於發現問題是什麼與未分配的值。我在域模型中創建的屬性只能獲取並返回已定義的但不包含setter的屬性。我爲該屬性添加了一個私有setter,映射現在正在應用 – rlcrews