0

얼마 전 엔티티 프레임 워크 코드로 내 테이블에 개체를 추가하는 코드를 만들었습니다.컨텍스트에 개체 추가 및 관계에서 속성 가져 오기

Context.Reactions.Attach(reaction); 
Context.SaveChanges(); 

나는 Profile이라는 관계를 사용하여 반응을 게시 한 사용자의 이름을 얻었습니다. 나는 사람의 이름을 얻을 때

reaction.Profile.FirstName + " " + reaction.Profile.LastName 

지금 잠시 후, 나는 프로필에 nullreference를 얻을.

왜 개체를 추가 할 수 없으며 그 후에 프로필 관계를 사용할 수 있습니까?

편집 : Profile 관계 속성에서 nullreference가 표시됩니다. 그래서 반응. 프로필은 그것이 null이라고 말합니다. 그것은 같은 경우입니다. Entity Framework에서 반응에 대한 ID를 부여하여 savechanges()가 작동합니다. FirstName을 가져 오는 줄은 SaveChanges 바로 뒤에있는 줄이므로 컨텍스트를 올바르게 처리 할 수 ​​없습니까?

전체 코드 : 심지어 주변이 코드 tryed

var reaction = new Reaction() 
           { 
            Text = reactionText, 
            ProfileId = CurrentProfileId, 
            PostedOn = DateTime.Now 
           }; 

        //Save changes to the backend 
        context.Reactions.Add(reaction); 
        context.SaveChanges(); 

        return Json(new 
        { 
         Id = reaction.Id, 
         ReactionType = reactionType, 
         ReactionTypeId = reactionTypeId, 
         ReactionText = reaction.Text, 
         PostedOn = reaction.PostedOn.ToString("G"), 
         ProfileName = string.Format("{0} {1}", reaction.Profile.FirstName, reaction.Profile.LastName) 
        }); 

.

using (var context = new SeeTingsContext()) 
       { 
        context.Configuration.LazyLoadingEnabled = true; 


       } 
+0

동일한 반응 인스턴스에 대해 null 참조 예외가 발생 했습니까? 새로 인용 된 것이 아닌가? – Betty

+0

위의 질문에 대한 추가 정보가 필요합니다. –

답변

0

나는 after a while을 읽었을 때 나는 당신을 꽤 얻지 못했습니다. 이것은 관계 객체를 먼저 얻고 갑자기 null이된다는 것을 의미합니까?
내 생각은 : 당신은 당신이 작업하고있는 상황에 대해 true로 LazyLoadingEnabled을 설정하지 않은

  • .
  • 컨텍스트가 삭제되어 관계를 가져올 수 없습니다. 컨텍스트가 존재하는 동안 지연로드를 사용할 수 있습니다.

업데이트 :

if (!context.Entry(reaction).Reference(r => r.Profile).IsLoaded) 
{ 
    context.Entry(reaction).Reference(r => r.Profile).Load(); 
} 

이 방법을 사용하여 프로필을 얻을 수없는 경우에, 나는 거기에 뭔가 가정 해 의견을 바탕으로, 당신이 프로필을 얻을 수 있다면 명시 적으로 관계를로드 보려고 매핑에 문제가 있습니다.

+0

예, 잠시 후 정확히 1.5 개월 동안 작동한다는 것을 의미하며 갑자기 그렇지 않습니다. 나는 Team Foundation Server를 보았고 아무것도 바뀌지 않았다. 나는 또한 맥락에서 어떤 차이도 찾을 수 없었다. 보시다시피, 코드가 맞아야합니다. id가 null이 아니므로 savechanges가 작동합니다. –

+0

@LockTar : 내 대답이 업데이트되었습니다. 당신이 일하도록 만들 수 있는지보십시오. – Kamyar

+0

// 프로필 관계 만 명시 적으로로드하십시오. Context.Entry (reaction) .Reference (r => r.Profile) .Load(); 이 코드는 SaveChanges() 바로 뒤에 있습니다. 이것이 왜 수행되어야하는지 알고 있습니까? –

관련 문제