主キー (AccLinkID) と外部キー (aspnet_Users UserID) を持つテーブルがある場合、Linq to Entities を使用して外部キーが指すオブジェクトを選択するにはどうすればよいですか。
User myUser = _myDB.AccLinkSet.Where(user => user.LinkID == linkId).FirstOrDefault().aspnet_Users;
動作しませんでした...
誰にもアイデアはありますか?
主キー (AccLinkID) と外部キー (aspnet_Users UserID) を持つテーブルがある場合、Linq to Entities を使用して外部キーが指すオブジェクトを選択するにはどうすればよいですか。
User myUser = _myDB.AccLinkSet.Where(user => user.LinkID == linkId).FirstOrDefault().aspnet_Users;
動作しませんでした...
誰にもアイデアはありますか?
Includeを使用してこれを解決することはできますが、他の人が示唆しているように、それは私が行う方法ではありません。代わりに、インクルードを必要としないプロジェクトを作成します。
var q = from al in yDB.AccLinkSet
where al.LinkID == linkId
select al.aspnet_Users;
この場合、ユーザーは自動的にロードされます。
これを試して:
User myUser = _myDB.AccLinkSet.Include("aspnet_Users")
.Where(user => user.LinkID == linkId).FirstOrDefault().aspnet_Users;
現時点では、Entity Framework 1 では、自動遅延読み込みは発生しません。たとえば、あるエンティティから次のエンティティにトラバースする場合.Include("OtherEntity")
、select で を実行してそれらのエンティティをクエリに含めるか、.Load("OtherEntity")
EntityContextを明示的に呼び出して、そのエンティティをロードします。
これは、EF チームが自動魔法の遅延読み込みをサポートしないという設計上の決定でした。彼らは、ユーザーがエンティティの 2 番目のセットを含めたりロードしたりしていることをユーザーに明確かつ明白にしたかったのです。
需要が高いため、今後の EF v4 (2009 年末に向けて .NET 4.0 と共にリリースされる予定) は、自動遅延読み込みをサポートします (使用したい場合)。デフォルトではオフになっているため、明示的に有効にする必要があります。
context.ContextOptions.DeferredLoadingEnabled = true;
その新機能に関するいくつかの記事を参照してください。