什么是与EF 4.1查询“很多很多”关系的正确方法?

时间:2011-07-10 02:08:52

标签: entity-framework entity-framework-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;}
}

这意味着从User到Post有两个多对多,也许它可以称为M:M:M关系。

现在,如果我想找到包含某个用户后面的标签的所有帖子。我想知道EF 4.1的最佳做法是什么?

如果使用ADO.NET,我认为加入两个联合表是有效的方法,但联合表是隐藏在EF中的,那么怎么做呢?我知道一些解决方案,但性能不好,因为生成的SQL不够好。所以我要求一个好的查询以获得良好的表现。

谢谢!

2 个答案:

答案 0 :(得分:0)

尝试在查询中使用“include”修饰符,如:

context ctx = new context()// context是本例中的实体上下文

var query = from c in ctx.posts.include(“tags.users”)             其中p.tags.Followers.ID = TargetUserID

这应该涵盖它

答案 1 :(得分:0)

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