سؤال
محاولة لصناعة بعض الكائنات.
تحتوي كائنات المصدر على خصائص مع _ قبل الاسم، الكائنات الوجهة - ليس كذلك. هل من الممكن تنفيذه إنشاء خريطة واحدة، وسيصبح هذا الآلية خريطة جميع _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)، لكنها حقا مجرد مسألة معرفة الريغة الصحيحة لتحصل على الذهاب:
في الوقت الحالي، أصبحت اتفاقيات التسمية عالمية ومبشرة على الملف الشخصي. نظرا لأن هذه الميزة جديدة، فلا توجد أي وثائق بخلاف الاختبارات.
نصائح أخرى
هذه هي الطريقة التي أفعلها
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 ) );
لا تنتمي إلى StackOverflow