2009-07-08 2 views
6

Alex James' Entity Framework tips articles에서 그는 (0120)에 대해 how to fake foreign key properties에 대해 이야기합니다. 이것은 정확히 내가 필요로하는 것처럼 보이지만, 어떤 이유로 든 나는 업데이트 할 때 그것을 꺼낼 수 없다. 나는 내 컨트롤러의 업데이트 부분에 다음과 같은 한 :이 실패하고 다음과 같은 밖으로 뱉어엔티티 키를 사용하여 외래 키 업데이트를 위장한

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Edit(candidates candidateToEdit) 
    { 
     string EduIDValue = candidateToEdit.education.ID.ToString(); 

     if (!ModelState.IsValid) 
      return View(); 

     try 
     { 
      var originalCandidate = (from c 
              in model.candidates 
              where c.ID == candidateToEdit.ID select c).FirstOrDefault(); 

      //attempting it here 
      originalCandidate.educationReference.EntityKey = new System.Data.EntityKey("model.education", "ID", candidateToEdit.education.ID); 

      model.ApplyPropertyChanges(originalCandidate.EntityKey.EntitySetName, candidateToEdit);     
      model.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 
     catch(Exception e) 
     { 
      Response.Write("Education ID Value " + EduIDValue + "<br /><br />Error: <br /><br />" + e); 
      return null;     
      //return View(); 
     } 
    } 

:

System.ArgumentException : 정체성 '모델'로 멤버를 메타 데이터 수집에 존재하지 않습니다. 매개 변수 이름 : System.Data.Metadata.Edm.MetadataCollection의 ID 1.GetValue(String identity, Boolean ignoreCase) at System.Data.Metadata.Edm.ReadOnlyMetadataCollection System.Data.Metadata.Edm.ItemCollection.GetEntityContainer (String name, Boolean ignoreCase) (System.Data.Metadata)의 1.GetValue (문자열 ID, 부울 ignoreCase) .Edm.ItemCollection.GetEntityContainer (String name) System.Data.Metadata.Edm.MetadataWorkspace.GetEntityContainer (String name, DataSpace dataSpace), System.Data.EntityKey.GetEntitySet (MetadataWorkspace metadataWorkspace) at System.Data.Objects.DataClasses. EntityReference.set_EntityKey (EntityKey 값) C : \ Documents and Settings \ graham \ My Documents \ Visual Studio 2008 \ Projects \ InternshipTest \ InternshipTest \ Controllers \ CandidatesController.cs의 InternshipTest.Controllers.CandidatesController.Edit (candidateToToTitle 후보) : 84 줄

내게 어떤 의미가 없는지, 모델은 분명히 이름입니다. EntitySet

답변

4

나는 그것을 알아 냈습니다. 사실 EntitySet이 잘못되었습니다. 새로운 엔티티 키를 만들 때 다음 인수를 첫 번째 인수로 전달하여이 문제를 해결했습니다.

originalCandidate.educationReference.EntityKey = new System.Data.EntityKey(originalCandidate.educationReference.EntityKey.EntityContainerName + "." + originalCandidate.educationReference.EntityKey.EntitySetName, "ID", candidateToEdit.education.ID); 

끔찍하지만 작동합니다. EF에서 외래 키 혼잡이 .net 4.0으로 분류되고 있습니다.

+1

당신이 시리즈를 좋아한다고 반갑습니다. 거기에 내가 방금 고정 블로그 게시물에 NULL 참조 예외 버그가 발생했습니다. –