EF架構~對(dui)AutoMapper實體(ti)映射的擴展
AutoMapper在之前我曾經介紹過,今天主要是把它作一(yi)下擴(kuo)展(zhan),因為它的(de)調(diao)用(yong)太麻煩了,呵(he)呵(he),擴(kuo)展(zhan)之(zhi)后,用(yong)著還可(ke)以,感覺(jue).net3.5之(zhi)后,有了擴(kuo)展(zhan)方(fang)法這(zhe)個東西,在(zai)程序開發速度(du)及表現力上都(dou)有了明顯的(de)提升,呵(he)呵(he)。
當擴展方法開發完之后(hou)的效果如(ru)下(xia)
實體(ti)對實體(ti)的映(ying)射(賦值(zhi))
var user = new User { ID = 1, Name = "zzl", CreateDate = DateTime.Now, }; UserModel model = user.MapTo<UserModel>(); Console.WriteLine(model.ID + model.Name);
集合對集合的映射(賦值(zhi))
var userList = new List<User> { user }; userList.Add(new User { ID = 2, Name = "zzllr", CreateDate = DateTime.Now, }); var modelList = userList.MapTo<UserModel>(); modelList.ForEach(i => { Console.WriteLine(i.Name); });
下面是(shi)擴展方(fang)法的(de)代碼,一個是(shi)實體的(de),一個是(shi)集合的(de)
/// <summary> /// AutoMapper擴(kuo)展(zhan)方法 /// </summary> public static class AutoMapperExtension { /// <summary> /// 集合對集合 /// </summary> /// <typeparam name="TResult"></typeparam> /// <param name="self"></param> /// <returns></returns> public static List<TResult> MapTo<TResult>(this IEnumerable self) { if (self == null) throw new ArgumentNullException(); Mapper.CreateMap(self.GetType(), typeof(TResult)); return (List<TResult>)Mapper.Map(self, self.GetType(), typeof(List<TResult>)); } /// <summary> /// 對(dui)(dui)(dui)象對(dui)(dui)(dui)對(dui)(dui)(dui)象 /// </summary> /// <typeparam name="TResult"></typeparam> /// <param name="self"></param> /// <returns></returns> public static TResult MapTo<TResult>(this object self) { if (self == null) throw new ArgumentNullException(); Mapper.CreateMap(self.GetType(), typeof(TResult)); return (TResult)Mapper.Map(self, self.GetType(), typeof(TResult)); } }