چگونگی رسیدگی به Null property در AutoMapper
نویسنده: مهراد
تاریخ: ۱۳۹۲/۰۲/۲۲ ۱۷:۴۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
AutoMapper کتابخانهای برای نگاشت اطلاعات یک شیء به شیءایی دیگر به صورت خودکار میباشد.
در این مقاله چگونگی رسیدگی به Null property را در AutoMapper بررسی خواهیم کرد. فرض کنید شیء منبع دارای یک خاصیت Null است و میخواهید به وسیله Automaper شیء منبع را به مقصد نگاشت نمایید. اما میخواهید در صورت Null بودن شیء مبدا، یک مقدار پیش فرض برای شیء مقصد در نظر گرفته شود .
برای نمونه کلاسuser را که در آن از کلاس Address یک خاصیت تعریف شده، در نظر بگیرید. اگر مقدار آدرس در شیء منبع خالی بود شاید شما بخواهید مقدار آن را به صورت empty string و یا با یک مقدار پیش فرض در مقصد مقدار دهی کنید.
همانند مثال زیر :
public class UserSource
{
public Address Address{get;set;}
}
public class UserDestination
{
public string Address{get;set;}
}AutoMapper.Mapper.CreateMap<UserSource, UserDestination>()
.ForMember(dest => dest.Address
, opt => opt.NullSubstitute("Address not found")
);var model = AutoMapper.Mapper.Map<UserSource, UserDestination>(user); var models = AutoMapper.Mapper.Map<IEnumerable<UserSource>, IEnumerable<UserDestination>>(users);
با سلام
مهندس من یه دیتابیس دارم که حاوی اطلاعات است در جداول اون در تمام ستونها به غیر از ستون کلید اومده تیک alow null رو فعال کرده یعنی این ستونها میتونه مقدار null رو بگیره .
حالا اون برنامه که این اطلاعات رو وارد دیتابیس کرده اومده هر ستونی که نوعش رشته بوده مقدار empty وارد کرده نه null و ستون هایی که نوعشون int هست مقدار صفر وارد کرده , مثل همین مطلبی که شما گفتید اما به صورت سنتی .
به نظر شما من باید همین رویه رو با روش شما انجام بدم یا نه همون مقدار null و در دیتابیس ذخیره کنم ؟
public class News : BaseEntity
{
public byte[] SmallImage { get; set; } // SmallImage
} news = model.ToEntity(news);
public static News ToEntity(this NewsModel model, News destination)
{
Mapper.CreateMap<NewsModel, News>();
return Mapper.Map(model, destination);
} public class TestModel
{
public byte[] MProperty { get; set; }
} public class TestViewModel
{
public byte[] VMProperty { get; set; }
} class Program
{
static void Main(string[] args)
{
Mapper.CreateMap<TestModel,TestViewModel>().ForMember(tv=>tv.VMProperty,m=>m.MapFrom(t=>t.MProperty));
TestModel tm = new TestModel();
tm.MProperty = new byte[] { 1, 2, 3 ,4};
TestViewModel tvm = Mapper.Map<TestModel, TestViewModel>(tm);
foreach (var item in tvm.VMProperty)
{
Console.WriteLine(item.ToString());
}
Console.ReadKey();
}
}