模型如下:
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不够好。所以我要求一个好的查询以获得良好的表现。
谢谢!
答案 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()