asp.net MVC3 프로젝트에서 Subsonic 3 및 Automapper를 사용하고 있습니다.Subsonic 및 Automapper - dirtyColumns 컬렉션이 비어있어 업데이트 할 수 없습니다.
내 HttpPost ActionResult에서 내 모델을 가져 와서 Subsonic 생성 엔터티에 매핑하고 있습니다.
매핑이 문제없이 작동하지만 엔티티를 업데이트 할 수 없습니다.
더 자세히 살펴보면 더티 컬럼이 없기 때문에 Subsonic이 아무것도 업데이트 할 필요가 없다고 생각하여 Update() 호출이 실패합니다.
코드로드가 다시 지그재그로 바뀌 었습니다. 모델에서 매핑하기 전에 메소드가 db에서 다시 엔티티를로드하도록 강요했습니다. 매핑이 dirtyColumns 추적을 파괴하는 것 같습니다. 예 : DB에서로드 한 후 매핑 한 다음 임의의 속성을 변경하면 더티 형 열로 표시되지 않습니다.
또한 SetIsLoaded (true) 메서드 호출을 사용해 보았습니다. 맵핑 후 기쁨이 없습니다. 내 PersonRepository에
[HttpPost]
public virtual ActionResult Edit(SinglePersonModel model)
{
if (ModelState.IsValid)
{
Data.Person person;
//Now Map my model to my entity - this works
Mapper.CreateMap<SinglePersonModel, Data.Person>();
person = Mapper.Map<SinglePersonModel, Data.Person>(model);
//THIS DOESN'T SET MY COLUMN TO DIRTY
person.Link = "asdjsadij";
//THIS DOESN'T SET MY COLUMN TO DIRTY EITHER
person.SetIsLoaded(true);
person.Link = "asdjsadij";
if (person.PersonId > 0)
PersonRepository.UpdatePerson(person);
else
PersonRepository.CreatePerson(person);
return RedirectToAction(MVC.SecureAdministration.Person.Index());
}
else return View(model);
}
정적 방법은 단지 각각 아음속의 업데이트() 및 저장()를 호출 :
여기 내 방법입니다.
어떤 아이디어라도 높이 평가할 수 있습니다. 필자는 모델에 오토 맵퍼가 엔티티로 이월되도록 추가 속성을 추가해야 할 필요가 있다고 생각합니다.
최악의 경우 모델에서 엔티티로 다시 매핑 할 때 Automapper를 사용하지 않아야합니다.
을 도와 -하지만 그건이 조금 :)
감사합니다 도움이 될 생각 소스 위치의 person 엔티티가 먼저 automapper를 사용하여 업데이트 할 때 dirty로 표시됩니다. – Buildstarted
예 아니요. 엔터티를 다시로드 한 다음 속성을 업데이트하면 더티로 표시됩니다. (어쨌든 다시 DB에서 엔티티를로드하는 것을 피하고 싶습니다.) 그러나 엔터티를 다시로드 한 다음 매핑하면 아무 것도 더티로 표시되지 않습니다. automapper가 대상 객체에서 덮어 쓰는 것에서 너무 잔인한 것처럼 보입니다. 어쨌든 소스에서 다시로드하지 않고 더티 컬럼을 얻을 수 있습니다. person.SetIsLoaded (true)를 호출하면됩니다. 다시 말하지만, 이것은 속성을 업데이트 할 때 작동하지만 매핑 할 때 작동하지 않습니다. –
'AutoMapper.Mapper.Map (모델, 사람);'- 이렇게 해 보셨습니까? 이것은 객체의 새로운 인스턴스를 할당하지 않고 기존 객체에 할당합니다. 그냥 생각. 나는 DB에서 그것을 로딩하지 않기를 바란다. 그러나 이것은 조금 도움이 될 것이라고 생각했습니다 :) –
Buildstarted