0

私は以前、エンティティフレームワークのコードでオブジェクトをテーブルに追加するコードを少し前に作成しました。オブジェクトをコンテキストに追加して関係からプロパティを取得

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

その後、私はProfileという名前の関係を使用して、反応を投稿したユーザーの名前を取得しました。

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

私は人の名前を取得しようとすると、しばらくしてからProfileにnull参照を取得します。

なぜ私はオブジェクトを追加できないのですか?そのあと、プロファイル関係を使用しますか?

編集: プロファイル関係プロパティでnull参照を取得しています。だから反応.Profileはそれがnullだと言います。同じインスタンスです。 Entity Frameworkは私に反応のidを与えて、savechanges()が機能するようにしました。 FirstNameを取得する行は、SaveChangesの直後の行で、コンテキストを正しく配置できないためですか?

完全なコード:

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を読んだとき、私はあなたを得られませんでした。最初に関係オブジェクトを取得してから、突然ヌルになるということですか?
私の推測では、次のとおりです。

  • あなたは、あなたが取り組んでいる状況を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(反応).Reference(r => r.Profile).Load(); 私はこのコードをSaveChanges()の直後に配置しました。 これがなぜ行われなければならないのか分かりますか? –

関連する問題