2011-09-23 8 views
6

に、私はこのクラスを持っているときに動作していない遅延ロード新しい保存されたオブジェクト、(それらを保存したコンテキストからそれらを取得)

public class Comment 
{  
    public long Id { get; set; } 
    public string Body { get; set; } 
    public long OwnerId { get; set; } 
    public virtual Account Owner { get; set; } 
    public DateTime CreationDate { get; set; } 
} 

問題は、仮想財産の所有者が行っているとき、私はnull object reference exceptionを得ることであるということです:新しいコンテキストと

comment.Owner.Name 

オブジェクトは(DbContextの同じインスタンスから)保存した後、この権利を呼び出す は

動作しますこれについて何か知ってる?

答えて

18

これは、コンストラクタでCommentを作成したためです。これは、Commentインスタンスがプロキシされておらず、遅延ロードを使用できないことを意味します。あなたはCommentのプロキシされたインスタンスを取得する代わりにDbSetCreateメソッドを使用する必要があります。

var comment = context.Comments.Create(); 
// fill comment 
context.Comments.Add(comment); 
context.SaveChanges(); 
string name = comment.Owner.Name; // Now it should work because comment instance is proxied 
+0

非常に簡潔かつポイントに、このためのおかげで、! –

+1

MVCバインダー(デフォルトのコンストラクターを使用)を使用して、これを実行しない方法を探している人は、次のように明示的に参照できます。 context.Entry(comment).Reference(x => x .Owner).Load(); –

+0

m.t.bennett:これはとても役に立ちました、ご意見ありがとうございました。 –

関連する問題