【发布时间】:2010-12-09 21:29:47
【问题描述】:
我有以下场景:
由于不幸的遗留数据库,我有一些映射到 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 和两个值(Large / Regular)。 MetadataType 有一个名称,这基本上是向用户询问有关样本的问题(准备编号是什么,N-Term 氨基酸是什么等...)
我想通过以下方式有条件地查看 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 中的值。
如果有约定有助于使这更容易,我可以更改属性的名称以更接近地匹配名称字符串。
似乎应该有一种巧妙的方法来做到这一点,而不必手动制作一个大怪物 switch 语句(大约有 50 个不同的问题)。
自动映射器可以处理这个吗?
【问题讨论】:
标签: orm automapper dto