2010-12-09 7 views
1

У меня сценарий:Как использовать autoapper для условного отображения ключа/значений в 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 и две значения (большие/обычные). Тип метаданных имеет имя, которое в основном задается пользователю о образце (что было номером Prep, What is N-Term Amino Acid и т. Д.)

Я хочу условно рассмотреть имя метаданных, следующим образом:

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.

Я могу изменить имена свойств, чтобы они в большей степени соответствовали строке Name, если использование соглашения помогает сделать это проще.

Похоже, что для этого нужно сделать гладкий способ, не требуя вручную создать большой оператор переключения монстров (имеется около 50 различных вопросов).

Может ли автопарк справиться с этим?

ответ

Смежные вопросы