我的項目中有一些〜10個基本模型,並且有些從彼此繼承。 其中我有文件,用戶,組,所有這些都有與組相關的ReadAccess和WriteAccess。全部從File繼承。文件也有一個地址字符串屬性。實體框架龐大的SQL從簡單的LINQ
我有一個LINQ查詢是從一對返回表達式樹的輔助函數中產生的。返回的表達樹之一基本上是
dbContext.Files.Where(f => f.Address == "somepath" && (f.ReadAccess == null || [4].Contains(f.ReadAccess.Id) || f.WriteAccess == null || [4].Contains(f.WriteAccess)).ToList()
這會生成龐大的SQL查詢。我想知道什麼所有的NULL作爲varchar/varbinary,爲什麼這是每個單一類型的文件時,他們在同一個表中生成?它似乎相當豐富。它是否會減慢執行中的SQL查詢或被SQL解析器優化掉?將表達式樹生成到LINQ to SQL時是否有任何缺陷?爲什麼當文件夾不能從文件繼承時,SQL查詢爲文件夾生成案例,而我只需要文件?
使用最新的EF(6.1)。
Alumis_SELECT
[Filter1].[Id1] AS [Id],
CASE WHEN ([Filter1].[Discriminator1] = N'Group') THEN '0X0X0X' WHEN ([Filter1].[Discriminator1] = N'User') THEN '0X0X1X' WHEN ([Filter1].[Discriminator1] = N'Article') THEN '0X0X2X' WHEN ([Filter1].[Discriminator1] = N'Folder') THEN '0X1X' WHEN ([Filter1].[Discriminator1] = N'Blob') THEN '0X0X3X' WHEN ([Filter1].[Discriminator1] = N'Image') THEN '0X0X3X0X' WHEN ([Filter1].[Discriminator1] = N'Role') THEN '0X0X4X' WHEN ([Filter1].[Discriminator1] = N'ScheduledIndexTask') THEN '0X0X5X0X' WHEN ([Filter1].[Discriminator1] = N'Website') THEN '0X1X0X' ELSE '0X1X0X0X' END AS [C1],
[Filter1].[Name1] AS [Name],
[Filter1].[Modified1] AS [Modified],
[Filter1].[IsDeleted1] AS [IsDeleted],
[Filter1].[Address1] AS [Address],
[Filter1].[SortOrder1] AS [SortOrder],
CASE WHEN ([Filter1].[Discriminator1] = N'Group') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'User') THEN [Filter1].[GivenName1] WHEN ([Filter1].[Discriminator1] = N'Article') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Folder') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Blob') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Image') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Role') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'ScheduledIndexTask') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Website') THEN CAST(NULL AS varchar(1)) END AS [C2],
CASE WHEN ([Filter1].[Discriminator1] = N'Group') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'User') THEN [Filter1].[Surname1] WHEN ([Filter1].[Discriminator1] = N'Article') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Folder') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Blob') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Image') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Role') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'ScheduledIndexTask') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Website') THEN CAST(NULL AS varchar(1)) END AS [C3],
CASE WHEN ([Filter1].[Discriminator1] = N'Group') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'User') THEN [Filter1].[EmailAddress1] WHEN ([Filter1].[Discriminator1] = N'Article') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Folder') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Blob') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Image') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Role') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'ScheduledIndexTask') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Website') THEN CAST(NULL AS varchar(1)) END AS [C4],
CASE WHEN ([Filter1].[Discriminator1] = N'Group') THEN CAST(NULL AS varbinary(1)) WHEN ([Filter1].[Discriminator1] = N'User') THEN CASE WHEN ([Filter1].[Discriminator1] = N'User') THEN [Filter1].[Password_Salt1] END WHEN ([Filter1].[Discriminator1] = N'Article') THEN CAST(NULL AS varbinary(1)) WHEN ([Filter1].[Discriminator1] = N'Folder') THEN CAST(NULL AS varbinary(1)) WHEN ([Filter1].[Discriminator1] = N'Blob') THEN CAST(NULL AS varbinary(1)) WHEN ([Filter1].[Discriminator1] = N'Image') THEN CAST(NULL AS varbinary(1)) WHEN ([Filter1].[Discriminator1] = N'Role') THEN CAST(NULL AS varbinary(1)) WHEN ([Filter1].[Discriminator1] = N'ScheduledIndexTask') THEN CAST(NULL AS varbinary(1)) WHEN ([Filter1].[Discriminator1] = N'Website') THEN CAST(NULL AS varbinary(1)) END AS [C5],
CASE WHEN ([Filter1].[Discriminator1] = N'Group') THEN CAST(NULL AS varbinary(1)) WHEN ([Filter1].[Discriminator1] = N'User') THEN CASE WHEN ([Filter1].[Discriminator1] = N'User') THEN [Filter1].[Password_Hash1] END WHEN ([Filter1].[Discriminator1] = N'Article') THEN CAST(NULL AS varbinary(1)) WHEN ([Filter1].[Discriminator1] = N'Folder') THEN CAST(NULL AS varbinary(1)) WHEN ([Filter1].[Discriminator1] = N'Blob') THEN CAST(NULL AS varbinary(1)) WHEN ([Filter1].[Discriminator1] = N'Image') THEN CAST(NULL AS varbinary(1)) WHEN ([Filter1].[Discriminator1] = N'Role') THEN CAST(NULL AS varbinary(1)) WHEN ([Filter1].[Discriminator1] = N'ScheduledIndexTask') THEN CAST(NULL AS varbinary(1)) WHEN ([Filter1].[Discriminator1] = N'Website') THEN CAST(NULL AS varbinary(1)) END AS [C6],
CASE WHEN ([Filter1].[Discriminator1] = N'Group') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'User') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Article') THEN [Filter1].[Headline1] WHEN ([Filter1].[Discriminator1] = N'Folder') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Blob') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Image') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Role') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'ScheduledIndexTask') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Website') THEN CAST(NULL AS varchar(1)) END AS [C7],
CASE WHEN ([Filter1].[Discriminator1] = N'Group') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'User') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Article') THEN [Filter1].[Lead1] WHEN ([Filter1].[Discriminator1] = N'Folder') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Blob') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Image') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Role') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'ScheduledIndexTask') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Website') THEN CAST(NULL AS varchar(1)) END AS [C8],
CASE WHEN ([Filter1].[Discriminator1] = N'Group') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'User') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Article') THEN [Filter1].[Body1] WHEN ([Filter1].[Discriminator1] = N'Folder') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Blob') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Image') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Role') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'ScheduledIndexTask') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Website') THEN CAST(NULL AS varchar(1)) END AS [C9],
CASE WHEN ([Filter1].[Discriminator1] = N'Group') THEN CAST(NULL AS int) WHEN ([Filter1].[Discriminator1] = N'User') THEN CAST(NULL AS int) WHEN ([Filter1].[Discriminator1] = N'Article') THEN CAST(NULL AS int) WHEN ([Filter1].[Discriminator1] = N'Folder') THEN CAST(NULL AS int) WHEN ([Filter1].[Discriminator1] = N'Blob') THEN [Filter1].[ProviderType1] WHEN ([Filter1].[Discriminator1] = N'Image') THEN [Filter1].[ProviderType1] WHEN ([Filter1].[Discriminator1] = N'Role') THEN CAST(NULL AS int) WHEN ([Filter1].[Discriminator1] = N'ScheduledIndexTask') THEN CAST(NULL AS int) WHEN ([Filter1].[Discriminator1] = N'Website') THEN CAST(NULL AS int) END AS [C10],
CASE WHEN ([Filter1].[Discriminator1] = N'Group') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'User') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Article') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Folder') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Blob') THEN [Filter1].[ProviderData1] WHEN ([Filter1].[Discriminator1] = N'Image') THEN [Filter1].[ProviderData1] WHEN ([Filter1].[Discriminator1] = N'Role') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'ScheduledIndexTask') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Website') THEN CAST(NULL AS varchar(1)) END AS [C11],
CASE WHEN ([Filter1].[Discriminator1] = N'Group') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'User') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Article') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Folder') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Blob') THEN [Filter1].[ContentType1] WHEN ([Filter1].[Discriminator1] = N'Image') THEN [Filter1].[ContentType1] WHEN ([Filter1].[Discriminator1] = N'Role') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'ScheduledIndexTask') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Website') THEN CAST(NULL AS varchar(1)) END AS [C12],
CASE WHEN ([Filter1].[Discriminator1] = N'Group') THEN CAST(NULL AS bigint) WHEN ([Filter1].[Discriminator1] = N'User') THEN CAST(NULL AS bigint) WHEN ([Filter1].[Discriminator1] = N'Article') THEN CAST(NULL AS bigint) WHEN ([Filter1].[Discriminator1] = N'Folder') THEN CAST(NULL AS bigint) WHEN ([Filter1].[Discriminator1] = N'Blob') THEN [Filter1].[Size1] WHEN ([Filter1].[Discriminator1] = N'Image') THEN [Filter1].[Size1] WHEN ([Filter1].[Discriminator1] = N'Role') THEN CAST(NULL AS bigint) WHEN ([Filter1].[Discriminator1] = N'ScheduledIndexTask') THEN CAST(NULL AS bigint) WHEN ([Filter1].[Discriminator1] = N'Website') THEN CAST(NULL AS bigint) END AS [C13],
CASE WHEN ([Filter1].[Discriminator1] = N'Group') THEN CAST(NULL AS int) WHEN ([Filter1].[Discriminator1] = N'User') THEN CAST(NULL AS int) WHEN ([Filter1].[Discriminator1] = N'Article') THEN CAST(NULL AS int) WHEN ([Filter1].[Discriminator1] = N'Folder') THEN CAST(NULL AS int) WHEN ([Filter1].[Discriminator1] = N'Blob') THEN CAST(NULL AS int) WHEN ([Filter1].[Discriminator1] = N'Image') THEN [Filter1].[Width1] WHEN ([Filter1].[Discriminator1] = N'Role') THEN CAST(NULL AS int) WHEN ([Filter1].[Discriminator1] = N'ScheduledIndexTask') THEN CAST(NULL AS int) WHEN ([Filter1].[Discriminator1] = N'Website') THEN CAST(NULL AS int) END AS [C14],
CASE WHEN ([Filter1].[Discriminator1] = N'Group') THEN CAST(NULL AS int) WHEN ([Filter1].[Discriminator1] = N'User') THEN CAST(NULL AS int) WHEN ([Filter1].[Discriminator1] = N'Article') THEN CAST(NULL AS int) WHEN ([Filter1].[Discriminator1] = N'Folder') THEN CAST(NULL AS int) WHEN ([Filter1].[Discriminator1] = N'Blob') THEN CAST(NULL AS int) WHEN ([Filter1].[Discriminator1] = N'Image') THEN [Filter1].[Height1] WHEN ([Filter1].[Discriminator1] = N'Role') THEN CAST(NULL AS int) WHEN ([Filter1].[Discriminator1] = N'ScheduledIndexTask') THEN CAST(NULL AS int) WHEN ([Filter1].[Discriminator1] = N'Website') THEN CAST(NULL AS int) END AS [C15],
CASE WHEN ([Filter1].[Discriminator1] = N'Group') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'User') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Article') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Folder') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Blob') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Image') THEN [Filter1].[FocalPoints1] WHEN ([Filter1].[Discriminator1] = N'Role') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'ScheduledIndexTask') THEN CAST(NULL AS varchar(1)) WHEN ([Filter1].[Discriminator1] = N'Website') THEN CAST(NULL AS varchar(1)) END AS [C16],
CASE WHEN ([Filter1].[Discriminator1] = N'Group') THEN CAST(NULL AS bit) WHEN ([Filter1].[Discriminator1] = N'User') THEN CAST(NULL AS bit) WHEN ([Filter1].[Discriminator1] = N'Article') THEN CAST(NULL AS bit) WHEN ([Filter1].[Discriminator1] = N'Folder') THEN CAST(NULL AS bit) WHEN ([Filter1].[Discriminator1] = N'Blob') THEN CAST(NULL AS bit) WHEN ([Filter1].[Discriminator1] = N'Image') THEN CAST(NULL AS bit) WHEN ([Filter1].[Discriminator1] = N'Role') THEN CAST(NULL AS bit) WHEN ([Filter1].[Discriminator1] = N'ScheduledIndexTask') THEN [Filter1].[IsEnabled1] WHEN ([Filter1].[Discriminator1] = N'Website') THEN CAST(NULL AS bit) END AS [C17],
CASE WHEN ([Filter1].[Discriminator1] = N'Group') THEN CAST(NULL AS time) WHEN ([Filter1].[Discriminator1] = N'User') THEN CAST(NULL AS time) WHEN ([Filter1].[Discriminator1] = N'Article') THEN CAST(NULL AS time) WHEN ([Filter1].[Discriminator1] = N'Folder') THEN CAST(NULL AS time) WHEN ([Filter1].[Discriminator1] = N'Blob') THEN CAST(NULL AS time) WHEN ([Filter1].[Discriminator1] = N'Image') THEN CAST(NULL AS time) WHEN ([Filter1].[Discriminator1] = N'Role') THEN CAST(NULL AS time) WHEN ([Filter1].[Discriminator1] = N'ScheduledIndexTask') THEN [Filter1].[Interval1] WHEN ([Filter1].[Discriminator1] = N'Website') THEN CAST(NULL AS time) END AS [C18],
CASE WHEN ([Filter1].[Discriminator1] = N'Group') THEN CAST(NULL AS datetimeoffset) WHEN ([Filter1].[Discriminator1] = N'User') THEN CAST(NULL AS datetimeoffset) WHEN ([Filter1].[Discriminator1] = N'Article') THEN CAST(NULL AS datetimeoffset) WHEN ([Filter1].[Discriminator1] = N'Folder') THEN CAST(NULL AS datetimeoffset) WHEN ([Filter1].[Discriminator1] = N'Blob') THEN CAST(NULL AS datetimeoffset) WHEN ([Filter1].[Discriminator1] = N'Image') THEN CAST(NULL AS datetimeoffset) WHEN ([Filter1].[Discriminator1] = N'Role') THEN CAST(NULL AS datetimeoffset) WHEN ([Filter1].[Discriminator1] = N'ScheduledIndexTask') THEN [Filter1].[NextScheduledTime1] WHEN ([Filter1].[Discriminator1] = N'Website') THEN CAST(NULL AS datetimeoffset) END AS [C19],
CASE WHEN ([Filter1].[Discriminator1] = N'Group') THEN CAST(NULL AS datetimeoffset) WHEN ([Filter1].[Discriminator1] = N'User') THEN CAST(NULL AS datetimeoffset) WHEN ([Filter1].[Discriminator1] = N'Article') THEN CAST(NULL AS datetimeoffset) WHEN ([Filter1].[Discriminator1] = N'Folder') THEN CAST(NULL AS datetimeoffset) WHEN ([Filter1].[Discriminator1] = N'Blob') THEN CAST(NULL AS datetimeoffset) WHEN ([Filter1].[Discriminator1] = N'Image') THEN CAST(NULL AS datetimeoffset) WHEN ([Filter1].[Discriminator1] = N'Role') THEN CAST(NULL AS datetimeoffset) WHEN ([Filter1].[Discriminator1] = N'ScheduledIndexTask') THEN [Filter1].[LastStarted1] WHEN ([Filter1].[Discriminator1] = N'Website') THEN CAST(NULL AS datetimeoffset) END AS [C20],
CASE WHEN ([Filter1].[Discriminator1] = N'Group') THEN CAST(NULL AS datetimeoffset) WHEN ([Filter1].[Discriminator1] = N'User') THEN CAST(NULL AS datetimeoffset) WHEN ([Filter1].[Discriminator1] = N'Article') THEN CAST(NULL AS datetimeoffset) WHEN ([Filter1].[Discriminator1] = N'Folder') THEN CAST(NULL AS datetimeoffset) WHEN ([Filter1].[Discriminator1] = N'Blob') THEN CAST(NULL AS datetimeoffset) WHEN ([Filter1].[Discriminator1] = N'Image') THEN CAST(NULL AS datetimeoffset) WHEN ([Filter1].[Discriminator1] = N'Role') THEN CAST(NULL AS datetimeoffset) WHEN ([Filter1].[Discriminator1] = N'ScheduledIndexTask') THEN [Filter1].[LastCompleted1] WHEN ([Filter1].[Discriminator1] = N'Website') THEN CAST(NULL AS datetimeoffset) END AS [C21],
CASE WHEN ([Filter1].[Discriminator1] = N'Group') THEN CAST(NULL AS int) WHEN ([Filter1].[Discriminator1] = N'User') THEN [Filter1].[Id2] WHEN ([Filter1].[Discriminator1] = N'Article') THEN CAST(NULL AS int) WHEN ([Filter1].[Discriminator1] = N'Folder') THEN CAST(NULL AS int) WHEN ([Filter1].[Discriminator1] = N'Blob') THEN CAST(NULL AS int) WHEN ([Filter1].[Discriminator1] = N'Image') THEN CAST(NULL AS int) WHEN ([Filter1].[Discriminator1] = N'Role') THEN CAST(NULL AS int) WHEN ([Filter1].[Discriminator1] = N'ScheduledIndexTask') THEN CAST(NULL AS int) WHEN ([Filter1].[Discriminator1] = N'Website') THEN CAST(NULL AS int) END AS [C22],
CASE WHEN ([Filter1].[Discriminator1] = N'Group') THEN CAST(NULL AS int) WHEN ([Filter1].[Discriminator1] = N'User') THEN CAST(NULL AS int) WHEN ([Filter1].[Discriminator1] = N'Article') THEN [Filter1].[Author_Id1] WHEN ([Filter1].[Discriminator1] = N'Folder') THEN CAST(NULL AS int) WHEN ([Filter1].[Discriminator1] = N'Blob') THEN CAST(NULL AS int) WHEN ([Filter1].[Discriminator1] = N'Image') THEN CAST(NULL AS int) WHEN ([Filter1].[Discriminator1] = N'Role') THEN CAST(NULL AS int) WHEN ([Filter1].[Discriminator1] = N'ScheduledIndexTask') THEN CAST(NULL AS int) WHEN ([Filter1].[Discriminator1] = N'Website') THEN CAST(NULL AS int) END AS [C23],
[Filter1].[Language_Id1] AS [Language_Id],
[Filter1].[ParentFolder_Id1] AS [ParentFolder_Id],
[Filter1].[ReadAccess_Id1] AS [ReadAccess_Id],
[Filter1].[WriteAccess_Id1] AS [WriteAccess_Id]
FROM (SELECT [Extent1].[Id] AS [Id1], [Extent1].[Name] AS [Name1], [Extent1].[Modified] AS [Modified1], [Extent1].[IsDeleted] AS [IsDeleted1], [Extent1].[Address] AS [Address1], [Extent1].[SortOrder] AS [SortOrder1], [Extent1].[GivenName] AS [GivenName1], [Extent1].[Surname] AS [Surname1], [Extent1].[EmailAddress] AS [EmailAddress1], [Extent1].[Password_Salt] AS [Password_Salt1], [Extent1].[Password_Hash] AS [Password_Hash1], [Extent1].[Headline] AS [Headline1], [Extent1].[Lead] AS [Lead1], [Extent1].[Body] AS [Body1], [Extent1].[ProviderType] AS [ProviderType1], [Extent1].[ProviderData] AS [ProviderData1], [Extent1].[ContentType] AS [ContentType1], [Extent1].[Size] AS [Size1], [Extent1].[Width] AS [Width1], [Extent1].[Height] AS [Height1], [Extent1].[FocalPoints] AS [FocalPoints1], [Extent1].[IsEnabled] AS [IsEnabled1], [Extent1].[Interval] AS [Interval1], [Extent1].[NextScheduledTime] AS [NextScheduledTime1], [Extent1].[LastStarted] AS [LastStarted1], [Extent1].[LastCompleted] AS [LastCompleted1], [Extent1].[Discriminator] AS [Discriminator1], [Extent1].[Author_Id] AS [Author_Id1], [Extent1].[Language_Id] AS [Language_Id1], [Extent1].[ParentFolder_Id] AS [ParentFolder_Id1], [Extent1].[ReadAccess_Id] AS [ReadAccess_Id1], [Extent1].[WriteAccess_Id] AS [WriteAccess_Id1], [Extent2].[Id] AS [Id2], [Extent3].[Id] AS [Id3]
FROM [dbo].[FilesAndFolders] AS [Extent1]
LEFT OUTER JOIN [dbo].[FilesAndFolders] AS [Extent2] ON ([Extent2].[Author_Id] IS NOT NULL) AND ([Extent1].[Id] = [Extent2].[Author_Id])
LEFT OUTER JOIN [dbo].[FilesAndFolders] AS [Extent3] ON ([Extent3].[Discriminator] IN (N'Group',N'User')) AND ((CASE WHEN ([Extent3].[Discriminator] = N'Group') THEN cast(1 as bit) ELSE cast(0 as bit) END) = 1) AND ([Extent1].[ReadAccess_Id] = [Extent3].[Id])
WHERE ([Extent1].[Discriminator] IN (N'Group',N'User',N'Article',N'Folder',N'Blob',N'Image',N'Role',N'ScheduledIndexTask',N'Website',N'Intranet')) AND (CASE WHEN ([Extent1].[Discriminator] = N'Group') THEN '0X0X0X' WHEN ([Extent1].[Discriminator] = N'User') THEN '0X0X1X' WHEN ([Extent1].[Discriminator] = N'Article') THEN '0X0X2X' WHEN ([Extent1].[Discriminator] = N'Folder') THEN '0X1X' WHEN ([Extent1].[Discriminator] = N'Blob') THEN '0X0X3X' WHEN ([Extent1].[Discriminator] = N'Image') THEN '0X0X3X0X' WHEN ([Extent1].[Discriminator] = N'Role') THEN '0X0X4X' WHEN ([Extent1].[Discriminator] = N'ScheduledIndexTask') THEN '0X0X5X0X' WHEN ([Extent1].[Discriminator] = N'Website') THEN '0X1X0X' ELSE '0X1X0X0X' END LIKE '0X0X%')) AS [Filter1]
LEFT OUTER JOIN [dbo].[FilesAndFolders] AS [Extent4] ON ([Extent4].[Discriminator] IN (N'Group',N'User')) AND ((CASE WHEN ([Extent4].[Discriminator] = N'Group') THEN cast(1 as bit) ELSE cast(0 as bit) END) = 1) AND ([Filter1].[WriteAccess_Id1] = [Extent4].[Id])
WHERE (([Filter1].[Address1] = @p__linq__0) OR (([Filter1].[Address1] IS NULL) AND (@p__linq__0 IS NULL))) AND (([Filter1].[Id3] IS NULL) OR ([Extent4].[Id] IS NULL) OR (([Filter1].[ReadAccess_Id1] IN (4)) AND ([Filter1].[ReadAccess_Id1] IS NOT NULL)) OR (([Filter1].[WriteAccess_Id1] IN (4)) AND ([Filter1].[WriteAccess_Id1] IS NOT NULL)))_p__linq__0=/artikkel-test
請問您可以擴展:「所有非主鍵列都是可空的,因爲這個表包含不同類型的對象(例如,用戶有一個強制的GivenName屬性,但是Group沒有。因爲用戶和組對象被存儲在同一個表中,GivenName對於用戶應該不爲null,對於組爲null)「。基本原理究竟在哪裏?由於文件和文件夾依賴於彼此,它會生成這麼多的SQL?我可以設計一個沒有額外SQL的等價查詢(我可不可以嗎?),那麼爲什麼你要爭辯呢? – HelloWorld 2014-11-10 18:47:39
GivenName根本不是強制性的([必填]) – HelloWorld 2014-11-11 06:34:12