EF6产生的SQL无效的SQL Server端

这听起来很疯狂-但以下是我观察到的事实: 我有一个使用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)

qq353883454 回答:EF6产生的SQL无效的SQL Server端

瞧瞧,在2月3日,错误无处不在。我们生产服务器中的所有流量似乎都受到了影响,我们的客户会遇到随机错误。

在托管网站的服务器上使用日志文件和Wireshark,我们可以排除该特定服务器,因为TCP软件包中的数据是正确的。我们也可以排除数据库服务器和另一个应用程序服务器,因为对这两个服务器的请求将以相同的方式失败。

最后,基础架构能够将问题隔离到网络中交换机上的故障端口。禁用此端口后,问题立即得到解决。

本文链接:https://www.f2er.com/3151173.html

大家都在问