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