Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net EF6生成的SQL不是有效的SQL server端_.net_Sql Server_Entity Framework 6 - Fatal编程技术网

.net EF6生成的SQL不是有效的SQL server端

.net EF6生成的SQL不是有效的SQL server端,.net,sql-server,entity-framework-6,.net,Sql Server,Entity Framework 6,这听起来很疯狂,但我观察到的事实如下: 我有一个使用EF6连接到SQL server的apsx mvc应用程序。 有时,我会对基线生成的SQL产生异常。比如: 关键字“AS”附近的语法不正确和“附近的语法不正确” “[Extend1]” (以及本协议的变更) 在我看来,这不应该发生在像EF这样的框架中 幸运的是,我引入了一个SQL拦截器(如),让我有机会在执行之前查看SQL。 我的第一步是检查生成的SQL,这看起来很正常。在另一个步骤中,我在SQL server上附加了一个探查器! 猜猜看,截获

这听起来很疯狂,但我观察到的事实如下: 我有一个使用EF6连接到SQL server的apsx mvc应用程序。 有时,我会对基线生成的SQL产生异常。比如:

关键字“AS”附近的语法不正确和“附近的语法不正确” “[Extend1]”

(以及本协议的变更)

在我看来,这不应该发生在像EF这样的框架中

幸运的是,我引入了一个SQL拦截器(如),让我有机会在执行之前查看SQL。 我的第一步是检查生成的SQL,这看起来很正常。在另一个步骤中,我在SQL server上附加了一个探查器! 猜猜看,截获日志中的SQL与探查器中记录的SQL不匹配。(听起来像福巴,但这就是观察者) 到目前为止,结论是:SQL中的单个字符不时会发生变化(在观察到的情况下,逗号会变成formfeed)

互联网上有人知道这可能是什么背景吗

更新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'.

检查字节显示在[OpeningHoursTo]之后有一个换页字符(\u000C)

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

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


最后,基础设施能够将问题隔离到网络中交换机上有缺陷的端口。禁用此端口后,问题立即得到解决。

这是一个随机错误,还是仅在特定查询中重复?就我个人而言,我不使用EF,因此我可能无法提供答案,但是,如果您可以发布导致这些错误的生成的SQL语句之一,可能会有人看到您遗漏的内容。您是否可以发布一个示例EF查询以及生成的SQL?您还可以检查SQL事件探查器在执行您的代码时提供了什么吗?请注意,SQL事件探查器实际上并不完全记录传入的语句——特别是对于RPC调用(即带有参数的语句,这是EF将生成的大部分语句)实际的参数值被格式化为T-SQL文本,即使它们实际上是作为二进制值在底层TDS流中传递的。所有这些都是一种冗长的说法,即剖析器也不总是显示字面上的真相。准确的比较需要你看到的实际语句。根据@Jeroenmoster所说的,你能在服务器上运行跟踪并捕获正在执行的实际语句吗?@zohar它是随机的-找不到模式。
exec sp_executesql N'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]',N'@p__linq__0 nvarchar(4000)',@p__linq__0=N'2341234'