كيف يمكنني استخدام Automapper لتعيين مفتاح / قيم مشروط إلى DTO؟

StackOverflow https://stackoverflow.com/questions/4403310

  •  25-09-2019
  •  | 
  •  

سؤال

لدي السيناريو التالي:

نظرًا لقاعدة بيانات إرثية مؤلمة ، لدي بعض الفصول التي تم تعيينها إلى 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 وقيمتان (كبيرون / منتظمون). يحتوي metaDatatype على اسم ، وهو أساس سؤال يتم طرحه للمستخدم حول عينة (ما هو رقم الإعدادية ، ما هو الأحماض الأمينية على المدى N ، إلخ ...)

أريد أن أنظر مشروطًا إلى اسم البيانات الوصفية ، بالطريقة التالية:

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.

يمكنني تغيير أسماء الخصائص لتطابق سلسلة الاسم بشكل أوثق إذا ساعد وجود اتفاقية في جعل هذا أسهل.

يبدو أنه يجب أن يكون هناك طريقة بقعة للقيام بذلك دون الحاجة إلى صياغة بيان مفتاح وحش كبير يدويًا (هناك حوالي 50 سؤالًا مختلفًا).

هل يمكن للسيارات التعامل مع هذا؟

هل كانت مفيدة؟
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top