5

アプリケーションを EF4 から EF5 に移行しました。以前のバージョンで以下のコードを使用して、新しく追加されたアイテムの関連エンティティを取得しました。

Student s = new Student();
s.Name = _name;
s.ClassID = _cID;

db.Students.Add(s);
db.SaveChanges();

ClassRoom c = s.ClassRoom;

そのため、特定のクラス エンティティを取得していましたc。しかし、今s.ClassRoomは null を返します。

ClassRoom学生のエンティティを取得するにはどうすればよいですか? 使用する必要がありますdb.ClassRooms.FirstOrDefault(....)か?

4

1 に答える 1

9

問題は、まだナビゲーション プロパティをロードしていないことです。

以下を使用できます。

db.Students.Include("ClassRoom")

また

using System.Data.Entity;
db.Students.Include(s=>s.ClassRoom)

nav プロパティを熱心にロードする

もう 1 つのオプションは、ナビゲーション プロパティを virtual でマークして遅延読み込みを有効にすることです。個人的には、よりパフォーマンスの高いコードを促進する前者 (熱心な読み込み) を好みます。

こちらのナビゲーション プロパティの記事もご覧ください

コードは次のようになります。

Student s = new Student();
s.Name = _name;
s.ClassID = _cID;

db.Students.Add(s);
db.SaveChanges();

//reload the entity from the DB with its associated nav property
s = db.Students.Include(s=>s.ClassRoom).Single(st=>st.StudentId == s.StudentId);
ClassRoom c = s.ClassRoom;
于 2013-09-05T07:06:54.970 に答える