2011-07-10 3 views
1

モデル:EF 4.1との「多対多」関係を問う正しい方法は何ですか?以下のように

public class User 
{ 
    public int Id 
    public virtual ICollection<Tag> FollowingTags {get;set;} 
} 

public class Tag 
{ 
    public int Id 
    public virtual ICollection<User> Followers {get;set;} 
    public virtual ICollection<Post> Posts {get;set;} 
} 

public class Post { 
    public int Id 
    public virtual ICollection<Tag> Tags {get;set;} 
} 

ある意味2多対多のユーザーからの投稿には、おそらくそれはM呼び出すことができます:M:Mの関係。

ここで、あるユーザーが後に続くタグを含むすべての投稿を検索したい場合EF 4.1のベストプラクティスは何ですか?

ADO.NETを使用している場合は、2つのジョイントテーブルを結合するのが効果的ですが、ジョイントテーブルはEFで非表示になっています。私はいくつかの解決策を知っているが、パフォーマンスは良くない、生成されたSQLは十分ではないため。だから私はよいパフォーマンスを得るために良いクエリをお願いします。

ありがとうございました!

答えて

0
(from p in db.Posts 
from t in p.Tags 
from f in t.Followers 
where f.Id == id 
select p).Distinct() 
0

のようなクエリで修飾「を含んで」使ってみてください://コンテキストがctx.postsにおけるpから=この場合

のvarクエリ内のエンティティのコンテキストである)(

コンテキストctx =新しいコンテキストを.INCLUDE( "tags.users")これは、それに

+0

"p.tags" をカバーしなければならないp.tags.Followers.ID = TargetUserID

ができない ".Followers" コレクションであり、そしてそうです。 – Chance

関連する問題