【问题标题】:How do I use automapper to conditionally map key / values to a DTO?如何使用 automapper 有条件地将键/值映射到 DTO?
【发布时间】: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


    【解决方案1】:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 2016-04-13
    • 1970-01-01
    相关资源
    最近更新 更多