我有以下情況:如何使用automapper有條件地將鍵/值映射到DTO?
由於遺留的遺留數據庫,我有一些類映射到NHibernate,我想要平鋪到一個DTO。它看起來是這樣的:
這裏是我最終想:
public class ProteinSampleDto
{
public virtual SampleType SampleType { get; set; }
public virtual Project Project { get; set; }
public virtual long Variant { get; set; }
public virtual DateTime CreationDate { get; set; }
public virtual User User { get; set; }
public virtual string PrepNumber { get; set; }
public virtual string Host { get; set; }
public virtual string NTermTag { get; set; }
public virtual string CTermTag { get; set; }
public virtual string Buffer { get; set; }
public virtual double ConcentrationMgPerMl { get; set; }
public virtual double StorageTemperatureCelsius { get; set; }
public virtual string PurificationProtocol { get; set; }
public virtual string Comments { get; set; }
public virtual string ProteinSequence { get; set; }
}
這裏是我交的數據庫映射:
public class ProteinSample : PersistentObject
{
public virtual SampleType SampleType { get; set; }
public virtual Project Project { get; set; }
public virtual long Variant { get; set; }
public virtual DateTime CreationDate { get; set; }
public virtual User User { get; set; }
public virtual IList<SampleMetadata> Metadata { get; set; }
}
public class SampleMetadata : PersistentObject
{
public virtual ProteinSample ProteinSample { get; set; }
public virtual MetadataType MetadataType { get; set; }
public virtual string Value { get; set; }
public virtual string LargeValue { get; set; }
}
public class MetadataType : PersistentObject
{
public virtual string Name { get; set; }
}
如果你仔細一看,SampleMetadata類型有MetadataType和兩個值(大/常規)。元數據類型有一個名稱,這基本上是一個問題,要求用戶提供樣品(什麼是準備號碼,什麼是N-端氨基酸等)。
我想有條件地看看MetadataType的名稱,採用以下方式:
If Name contains: "Prep Number"
populate the "PrepNumber" property on ProteinSampleDTO with SampleMetadata.Value
else if Name contains: "N-Term AA"
populate the "NTermTag" property on ProteinSampleDTO with SampleMetadata.LargeValue
//etc
您明白了。我想匹配MetdataType.Name中的內容到DTO屬性名稱,並使用SampleMetadata類中Value或Large Value的值。
我可以改變屬性的名稱,以更接近地匹配名稱字符串,如果有一個約定有助於使這更容易。
似乎應該有一個很好的方法來做到這一點,而無需手動製作一個大怪物開關語句(大約有50個不同的問題)。
automapper能處理這個嗎?