自己被这个问题困扰了好久了,总是搞不定这个问题,今天才算是解决了,记录一下,我的第一篇博客
直接上代码:
1 class Group{ 2 public string Id{get;set;} 3 public string Name{get;set;} 4 public List<Person> People{get;set;} 5 } 6 class Person{ 7 public string Id{get;set;} 8 public string Name{get;set;} 9 public Group Group{get;set;} 10 public string GroupId{get;set;} 11 } 12 class GroupDto{ 13 public string Id{get;set;} 14 public string Name{get;set;} 15 public List<PersonDto> People{get;set;} 16 } 17 class Person{ 18 public string Id{get;set;} 19 public string Name{get;set;} 20 public string GroupId{get;set;} 21 } 22 23 //AutoMapper的写法 24 Mapper.Create<GroupDto,Group>().ForMember(output=>output.People,opt=>{ 25 opt.Ignore(); 26 }); 27 //Update Group 28 void Update(GroupDto groupDto){ 29 Group group = Service.Find(groupDto.Id); 30 List<Person> ps = new List<Person>(); 31 ps.AddRange(group.People); 32 group.People.Clear(); 33 Mapper.Map(grouptDto,group); 34 foreach (var newP in groupDto.People){ 35 //在旧数据中查找Id是否与新数据Id相等 36 var oldP = ps.FirstOrDefault(p=>p.Id.Equals(newP.Id));
//如果没有找到,是新数据,直接转换 37 if (oldP == null){ 38 group.People.Add(Mapper.Map<Person>(newP)); 39 }else{
//旧数据,为旧数据赋值,如果导航属性没有改变,直接添加即可 40 // Mapper.Map(newP,oldP); 41 group.People.Add(oldP); 42 43 } 44 SaveCahnges(); 45 46 47 48 49 } 50
浙公网安备 33010602011771号