2011-02-25 4 views
1

이것은 큰 문제의 일부로서 나를 잠시 괴롭혔습니다 (전체 그림은 "EntityCollection already initialized" error with entity as model in Asp.Net MVC? 참조).MVC 3 애플리케이션에서 모델 하위 컬렉션을 업데이트 하시겠습니까?

하지만 비슷한 문제에 직면 해 있고 분명히 자신의 필요에 맞게 해결 한 사람이있는 웹 사이트를 발견했습니다 (http://codeblog.shawson.co.uk/creating-an-order-order-details-style-form-using-asp-net-mvc2-entity-framework/ 참조). 나는 그것을 시도했지만 내 코드에 맞게 수정해야했고 Steven Sanderson (이전 게시물 참조)의 튜토리얼에서 제공 한 도우미 메서드를 사용해야했다.

나는 보인다 매우 가까운 해요,하지만 꽤 :

 UpdateModel(consultant, "Consultant"); 

     if (vm.Programs != null) //Unnecessary? Can it even be null if it's initialized from the model? 
      for (int i = 0; i < vm.Programs.Count; i++) 
      { 
       Program formProgram = vm.Programs[i]; 
       Program modelProgram = consultant.Programs.SingleOrDefault(x => x.Id == formProgram.Id); 
       if (modelProgram == null) 
        _repository.AddProgram(formProgram); 
       else 
        modelProgram = formProgram; 
       UpdateModel(modelProgram); //Doesn't work. The modelProgram object does get updated with the correct property values, but it isn't saved to the repository... 
      } 
     _repository.Save(); 

이 위의 사이트의 예를 다음과 modelProgram가 변경된 등록 정보로 업데이트됩니다 않지만, 이러한 값은 저장되지 않습니다 modelProgram 객체가 Consultant의 Program 객체에 대한 참조 일지라도 Consultant 객체의 _repository.Save()에있는 데이터베이스 ... 내가 뭘 잘못하고 있니?

명확하지 않은 방식으로 Entity Framework를 사용하고 있습니다.

(BTW, 이전 질문 및 전체 그림에 대한 의견이있는 사람이라면 환영할만한 것이지만 아직 해결되지 않았습니다).

도와주세요, 난 ... 아주 최근에 대해 너무 흥분했다 MVC에

UPDATE를 믿음을 잃고 : 여기에 실수가 분명히 있었다 : UpdateModel가 실제로 업데이트를하지 않았다, 나는 modelProgram에 대해 다른 객체 (뷰 모델의 객체)를 방금 참조 했으므로 당연히 올바른 속성 값을가집니다. 그래도 이것을 달성하는 방법에 대한 아이디어가 필요합니다 ...

+0

@everyone을에 넣어보십시오 : 나는 AutoMapper와 다른 무언가를 시도 끝났다. 나는 그것을 위해 새로운 질문을 만들었다 : http://stackoverflow.com/questions/5126603/trying-to-use-automapper-for-model-with-child-collections-getting-null-error-in. 실제로 작동하게 만들었지 만, 코드에 만족하지는 않습니다. 따라서 누군가 내가 제공 한 것보다 훨씬 더 좋은 방법을 사용한다면,이 질문과 그 질문에 모두 도움이됩니다! – Anders

답변

0

for 루프 내에서 _repository.Save()를 이동해보십시오.

올바른지 내부가 맞습니까? modelProgram이 null 인 경우 UpdateModel (null)을 실행 중입니다. 이것은 왜곡되어 아무 것도 구원을 얻지 못하는 이유를 설명 할 수 있습니다.

편집

} {

  if (modelProgram == null) 
       { 
       _repository.AddProgram(formProgram); 
       } 
      else      
       { 
       modelProgram = formProgram;     
       UpdateModel(modelProgram); 
       } 
+0

차이가 없습니다. 위의 내 업데이트를 참조하십시오. UpdateModel은 아무 것도하지 않았으며 modelProgram = formProgram은 잘못되었습니다 ... 그래서 나는 여전히 어려움을 겪고 있습니다. – Anders

+0

아무런 차이가 없으므로 View의 구조와 관련하여 모든 것이 잘못되었다고 생각됩니다. 이제 AutoMapper를 사용하여 위의 주석을 참조하십시오. – Anders

관련 문제