2012-02-03 19 views
8

EF 4では、SQLをDbContext.Database.SqlQueryまたはDbContext.Set<T>().SqlQueryに書き込むことで、ナビゲーションプロパティの読み込みを熱心に行うことはできますか?私は、私のナビゲーションプロパティに人が住んでいないようです。DbContext.Database.SqlQueryを使用してEntityFrameworkに読み込むこと

編集

私が、DbContext.Set()。のSQLQueryでeagerloading DbContext.Database.SqlQueryだけでは行うことができそうです。どんな考え?

+0

DbContext.Set()のSQLQueryは、積極的なロードを行いません。それは怠惰な読み込みを行います。実行されたsqlを出力し、コードをステップ実行すると、これを見ることができます。db.Database.Log = message => {Debug.WriteLine(message); }; –

答えて

4

DbSet.SqlQueryはDatabase.SqlQueryとは動作が異なります。 DbSetのメソッドは、指定されたエンティティセットに適用されます。与えられた型のエンティティを返す必要があり、デフォルトでは返されたエンティティが追跡されます。 Database.SqlQueryは任意のオブジェクト(おそらくエンティティではない)を返すことができ、返されたオブジェクトはコンテキストによって決して追跡されません。あなたはまた、両方の方法を比較するために、MSDNを見てみたいことがあります。。

Database.SqlQuery - http://msdn.microsoft.com/en-us/library/gg679117(v=vs.103).aspx

DbSet.SqlQuery - http://msdn.microsoft.com/en-us/library/system.data.entity.dbset.sqlquery(v=VS.103).aspx

+0

お返事ありがとうございます。私はすでに追跡部分について知っています。なぜ私のナビゲーションプロパティにデータが入力されないのだろうかと思います。 1-Mの関係(raw SQL)のテーブルにジョインすると、ナビゲーションプロパティがeagerloadされることが予想されます。これはDbContext.Set ().SqlQueryを使用しますが、なんらかの理由でDbContext.Database.SqlQueryでは使用できません。 – enamrik

+0

ナビゲーションプロパティをポピュレートするコードを表示できますか?どちらのメソッドも最終的にObjectContext.ExecuteStoreQueryを呼び出すため、ナビゲーションプロパティを設定するとは思われません。 – Pawel

+0

これを確認してくださいhttps://gist.github.com/0xorial/6363788 – ironic

関連する問題