使用Entity Framework和.NET 3.5查询多对多关系

4

我的问题实际上有两个方面。首先,我对EF并不是很熟悉,但之前曾经通过采用捷径的方式来使用它取得了一些成功。不过,对于这个特定项目,我计划花时间学习。

目前我拥有一个非常简单的数据库结构:

Post
===================
Id     Title
-------------------
 1     Hello world
 2     Foo bar baz

Tag
===================
Id     Title
-------------------
 6     test
 7     todo

PostTags
===================
PostId     TagId
-------------------
     1         6
     1         7
     2         7

使用EF,它会生成两个实体模型:PostTag

我的目标:

我想查询给定tagIds数组(例如6和7)的所有帖子。然而,我不知道该怎么做才能实现这一点。 之前,我采用了一种取巧的方法,将自增主键添加到映射表(BlogPosts)中,并将其添加到EF模型中,但这更像是一个丑陋的hack以便继续前进。这一次,我宁愿学习如何正确地完成它。

1个回答

1

这将在EFv4中起作用。在EFv1中尝试一下:

var tagIds = new int[] { 6, 7 };
var query = context.Tags
                   .Where(t => tagIds.Contains(t.Id))
                   .SelectMany(t => t.Posts);

编辑: 我检查了一下,集合值参数加上Contains在 EFv4 中被添加了,所以上面的例子在 EFv1 中不起作用。这个MSDN论坛的帖子提供了一种解决方案,可以在EFv1中使用IN操作符。另一个推荐的解决方案是直接升级到EFv4,因为还有很多其他改进,包括性能方面的显著提升。

谢谢回复,但它似乎不适用于我使用的EF 1。抛出以下异常:LINQ to Entities不识别“Boolean Contains(Int32)”方法,该方法无法转换为存储表达式。 - Adam Asham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接