개체가 있으므로, Sons and Daughters 컬렉션을 가진 Parent라고 부르 자고합니다.컬렉션이있는 오토 맵퍼 매핑 객체
public class Parent {
ICollection<Son> ParentsSons { get; set; }
ICollection<Daughter> ParentsDaughters { get; set; }
}
public class Son {
public Parent Parent { get; set; }
}
public class Daughter{
public Parent Parent { get; set; }
}
앞뒤로 매핑되는 모델 클래스와 데이터 클래스가 있다고 가정합니다.
Mapper.Initialize(cfg =>
{
cfg.CreateMap<Data.Parent, Models.Parent>() .AfterMap((src, dest) =>
{
foreach (var i in dest.Sons)
i.Son = dest;
foreach (var i in dest.Daughters)
i.Daughters = dest;
})
.ReverseMap();
cfg.CreateMap<Data.Son, Models.Son>().ForMember(m => m.Parent, opt => opt.Ignore()).ReverseMap();
cfg.CreateMap<Data.Daughter, Models.Daughter>().ForMember(m => m.Parent, opt => opt.Ignore()).ReverseMap();
}
나는 각각 아들과 딸의 부모를 무시하고 부모의 AfterMap의 각 아들과 딸에게 부모를 매핑하고있다. 이것이 내가 그것을 설정하기 위해 따르고있는 예에서 어떻게 이루어 졌는지입니다.
나는 부모를 뽑을 수 있고 아들 딸들의 컬렉션이 돌아와서 내가 사용할 수 있고 그 모든 것이 내가 원하는 것일 수있다. 나는 아들이나 딸을 낳을 수 있고 부모님은 돌아 오실 수 있습니다.
내가 겪고있는 문제는 무언가를 되돌리고 다시 저장하는 것입니다. 새로운 부모를 만들고 아들이나 딸들을 추가 할 때 나는 그 새로운 부모를 살릴 수 있고 아들 딸들을 구원 할 수 있습니다.하지만 부모님, 아들, 딸을 데이터베이스에서 끌어 와서 뭔가를 바꾸면 그것을 다시 보내려고하면 Model.Parent => Data.Parent의 매핑에서 Stack Overflow 예외가 발생하여 실패합니다.
데이터를 가져올 때 Data.Parent => Models.Parent ... 매핑이 잘되지 않습니다. 그렇다면 왜 실패입니까?
데이터 클래스는 EF로 생성되며 모델 클래스는 다른 레이어에 배치 된 데이터 클래스의 복사본입니다. 당신이 데이터에 대해했던 것과 같은 방식으로 -
오, 당신이 바로 농담이지? –
내 말은, 그게 쉽지 않다는 농담이야. 그것은 의미가 있지만, 나는 단지'ReverseMap()'이 역으로 같은 것을 한 것이라고 생각했습니다. –
W/O 수동으로 수행하면 원래 게시물에서와 동일한 'StackOverflowException'가 표시됩니다. 코드는 같지만 실제로'ReverseMap' 이후에'src'와'dest'가 교환됩니다. –