سؤال

محاولة لصناعة بعض الكائنات.
تحتوي كائنات المصدر على خصائص مع _ قبل الاسم، الكائنات الوجهة - ليس كذلك. هل من الممكن تنفيذه إنشاء خريطة واحدة، وسيصبح هذا الآلية خريطة جميع _properties إلى الخصائص
لجميع أنواع المصدر.

class MyMapper<TFrom, TTo>{
    TTo PerformMap(TFrom fromObject){
        Mapper.CreateMap<From, To>(); // ???
        TTo result = Mapper.Map<From, To>(fromObject);
        //result.Id.ShouldBe(value from TFrom._Id);
        return result;
    }
}

class From
{
    public int _Id { get; set; }
    public string _Name { get; set; }
}

class To
{
    public int Id { get; set; }
    public string Name { get; set; }
}
هل كانت مفيدة؟

المحلول

شيء أضفته مؤخرا إلى Automapper قد يساعدك - اتفاقيات تسمية مخصصة. إذا قمت بالتحقق من الجذع (r107)، فابحث حولها للحصول على تسجيل الدخول. الآن، لدي اتفاقية تسمية (Pascalcase و Lower_Case_Underscore)، لكنها حقا مجرد مسألة معرفة الريغة الصحيحة لتحصل على الذهاب:

inamingconvention.cs.

في الوقت الحالي، أصبحت اتفاقيات التسمية عالمية ومبشرة على الملف الشخصي. نظرا لأن هذه الميزة جديدة، فلا توجد أي وثائق بخلاف الاختبارات.

نصائح أخرى

هذه هي الطريقة التي أفعلها

Mapper.Initialize(cfg =>
        {
            cfg.RecognizeDestinationPrefixes(new []{"_"});
            cfg.RecognizePrefixes(new[] { "_" });

            cfg.CreateMap<To, From>().ReverseMap();
        });

لهذا يمكنك إضافة رسم خرائط مخصصة لحل هذه الحالة بالذات:

Mapper.CreateMap<From, To>()
   .ForMember( dest => dest.Id, opt => opt.MapFrom( src => src._Id ) )
   .ForMember( dest => dest.Name, opt => opt.MapFrom( src => src._Name ) );
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top