假设我有 3 个表 Posts、PostTags 和 Tags 定义多对多关系。我想获得一个查找表,它将为我提供与给定标签相关的所有帖子,因此我使用以下代码:
return dataContext.PostTags.ToLookup(pt => pt.Tag, pt => pt.Post);
在单元测试中一切正常,但在实际应用程序中,它不起作用。我发现我的单元测试和我的应用程序之间有不同的加载选项。
当dataContext.DeferredLoadingEnabled = true;
,一切都很好并且按预期工作,但是当dataContext.DeferredLoadingEnabled = false;
您没有从PostTags
toPost
和的加载选项时Tag
,返回的查找包含单个键(null),其中包含一个空数组作为值。生成的 SQL 是
SELECT [t0].[PostID], [t0].[TagID]
FROM [dbo].[PostTags] AS [t0]
因此,当它生成查找时,pt => pt.Post
返回null
,标签也是如此。
为什么在这种情况下 Linq2SQL 提供程序不能生成正确的 SQL?
澄清:通过正确的 SQL,任何将返回正确的 Post 和 Tag 对象并允许对它们进行正确分组的 SQL。