自己被这个问题困扰了好久了,总是搞不定这个问题,今天才算是解决了,记录一下,我的第一篇博客

直接上代码:

 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

 

posted on 2017-12-14 20:20  hh8527  阅读(430)  评论(0)    收藏  举报