这听起来很疯狂-但以下是我观察到的事实: 我有一个使用EF6连接到SQL Server的apsx mvc应用程序。 我有时会在底层生成的SQL上遇到异常。喜欢:
关键字“ AS”附近的语法不正确”和“关键字附近的语法不正确” '[Extend1]'
(及其变化形式)
在我看来,这不应该在EF之类的框架中发生。
幸运的是,我引入了一个SQL拦截器(如https://docs.microsoft.com/en-us/ef/ef6/fundamentals/logging-and-interception),这使我有机会在执行之前查看SQL。 我的第一步是检查生成的SQL-这看起来很不错。在另一步骤中,我在SQL Server上附加了探查器! 猜猜是什么-截获日志的SQL与分析器中记录的SQL不匹配。 (声音富巴,但这是观察者) 结论是迄今为止:SQL中的单个字符不时发生变化(在观察到的情况下,逗号变成了换页符。)
互联网上有谁知道这可能是什么背景吗?
更新1 :(要求的信息)
=== EF代码===
public Customer GetById(string id)
{
return DbContext.Customers.Include("Address").FirstOrDefault(a => a.Id == id);
}
===来自拦截器===
2019-11-06 09:07:14.471 +01:00 [Interceptors.SqlLogInterceptor] [44] [<<username>>] [Debug] SELECT
[Limit1].[AddressTypeId] AS [AddressTypeId],[Limit1].[Id] AS [Id],[Limit1].[AddressId] AS [AddressId],[Limit1].[ShowPrebooking] AS [ShowPrebooking],[Limit1].[Id1] AS [Id1],[Limit1].[Name1] AS [Name1],[Limit1].[Name2] AS [Name2],[Limit1].[Address1] AS [Address1],[Limit1].[Address2] AS [Address2],[Limit1].[HouseNumber] AS [HouseNumber],[Limit1].[PostCode] AS [PostCode],[Limit1].[City] AS [City],[Limit1].[State] AS [State],[Limit1].[CountryCode] AS [CountryCode],[Limit1].[ContactName] AS [ContactName],[Limit1].[Email] AS [Email],[Limit1].[Phone] AS [Phone],[Limit1].[Mobile] AS [Mobile],[Limit1].[CreatedByUserId] AS [CreatedByUserId],[Limit1].[CreatedDateTime] AS [CreatedDateTime],[Limit1].[UpdatedByUserId] AS [UpdatedByUserId],[Limit1].[UpdatedDateTime] AS [UpdatedDateTime],[Limit1].[DeliveryDescription] AS [DeliveryDescription],[Limit1].[OpeningHoursTo] AS [OpeningHoursTo],[Limit1].[OpeningHoursFrom] AS [OpeningHoursFrom]
FROM ( SELECT TOP (1)
[Extent1].[Id] AS [Id],[Extent1].[AddressId] AS [AddressId],[Extent1].[ShowPrebooking] AS [ShowPrebooking],[Extent2].[Id] AS [Id1],[Extent2].[Name1] AS [Name1],[Extent2].[Name2] AS [Name2],[Extent2].[Address1] AS [Address1],[Extent2].[Address2] AS [Address2],[Extent2].[HouseNumber] AS [HouseNumber],[Extent2].[PostCode] AS [PostCode],[Extent2].[City] AS [City],[Extent2].[State] AS [State],[Extent2].[CountryCode] AS [CountryCode],[Extent2].[ContactName] AS [ContactName],[Extent2].[Email] AS [Email],[Extent2].[Phone] AS [Phone],[Extent2].[Mobile] AS [Mobile],[Extent2].[AddressTypeId] AS [AddressTypeId],[Extent2].[CreatedByUserId] AS [CreatedByUserId],[Extent2].[CreatedDateTime] AS [CreatedDateTime],[Extent2].[UpdatedByUserId] AS [UpdatedByUserId],[Extent2].[UpdatedDateTime] AS [UpdatedDateTime],[Extent2].[DeliveryDescription] AS [DeliveryDescription],[Extent2].[OpeningHoursTo] AS [OpeningHoursTo],[Extent2].[OpeningHoursFrom] AS [OpeningHoursFrom]
FROM [dbo].[Customers] AS [Extent1]
INNER JOIN [dbo].[Addresses] AS [Extent2] ON [Extent1].[AddressId] = [Extent2].[Id]
WHERE [Extent1].[Id] = @p__linq__0
) AS [Limit1]
2019-11-06 09:07:14.471 +01:00 [Yourleman.Ef.Interceptors.SqlLogInterceptor] [44] [<<username>>] [Debug] -- Failed in 1 ms with error: Incorrect syntax near 'Limit1'.
Incorrect syntax near the keyword 'AS'.
===来自事件探查器的跟踪===
exec sp_executesql N'SELECT
[Limit1].[AddressTypeId] AS [AddressTypeId],[Limit1].[OpeningHoursTo] AS [OpeningHoursTo]
[Limit1].[OpeningHoursFrom] AS [OpeningHoursFrom]
FROM ( SELECT TOP (1)
[Extent1].[Id] AS [Id],[Extent2].[OpeningHoursFrom] AS [OpeningHoursFrom]
FROM [dbo].[Customers] AS [Extent1]
INNER JOIN [dbo].[Addresses] AS [Extent2] ON [Extent1].[AddressId] = [Extent2].[Id]
WHERE [Extent1].[Id] = @p__linq__0
) AS [Limit1]',N'@p__linq__0 nvarchar(4000)',@p__linq__0=N'2341234'
检查字节显示[OpeningHoursTo]后是否有换页符(\ u000C)