2010-12-09 115 views
1

我有以下情況:如何使用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能處理這個嗎?

回答

相關問題