Azure Entity Framework SQL 上的 TDS 错误 Windows 2018 年 4 月 10 日更新后调用
TDS Error on Azure Entity Framework SQL Calls after Windows 10 April 2018 Update
我有以下针对 Azure 中托管的 SQL 服务器执行的 C# 代码。
protected IQueryable<T> FilterUpdatedRows<T>(IQueryable<T> query, DateTime lastSyncTimestamp) where T: class, ITimestamp
{
return query.Where(x => x.InsertTimestamp >= lastSyncTimestamp ||
(x.UpdateTimestamp.HasValue && x.UpdateTimestamp >= lastSyncTimestamp));
}
通用 (T) 是 Entity Framework 上下文 类 实现和接口,强制定义 InsertTimestamp 和 UpdateTimestamp。
在我安装 Windows 10 的 2018 年 4 月更新之前,此代码一直运行良好。Post 更新我收到以下错误...
SqlException: The incoming tabular data stream (TDS) remote procedure call (RPC) protocol stream is incorrect. Parameter 2 (""): Data type 0x00 is unknown.
我确认导致问题的参数是 InsertTimestamp 和 UpdateTimestamp 字段。
此错误仅在我将我的 SQL 数据库副本定位到 Azure 时发生。将数据库导出到本地数据库没有问题。未升级到 2018 年 4 月更新的团队成员在打 Azure 版本时没有问题。
我 运行 在我的本地版本上进行了 SQL 跟踪并捕获了正在执行的 SQL 语句。 运行 通过 SSMS 针对 Azure 版本的声明没有问题。
这是跟踪捕获的 SQL 语句 ...
exec sp_executesql N'SELECT
[Extent1].[CrossingId] AS [CrossingId],
... Misc other fields ...
[Extent1].[CrossingInstanceId] AS [CrossingInstanceId]
FROM (SELECT
[V_SYNC_CrossingsSync].[CrossingId] AS [CrossingId],
... Misc other fields ...
[V_SYNC_CrossingsSync].[CrossingInstanceId] AS [CrossingInstanceId]
FROM [dbo].[V_SYNC_CrossingsSync] AS [V_SYNC_CrossingsSync]) AS [Extent1]
WHERE ([Extent1].[InsertTimestamp] >= @p__linq__0) OR (([Extent1].[UpdateTimestamp] IS NOT NULL) AND ([Extent1].[UpdateTimestamp] >= @p__linq__1))',N'@p__linq__0 datetime2(7),@p__linq__1 datetime2(7)',@p__linq__0='1980-01-01 00:00:00',@p__linq__1='1980-01-01 00:00:00'
对可能发生的事情有什么想法吗?
谢谢
临时解决方法:
根据 ChainbridgeTech 在我的连接字符串中将 MultipleActiveResultSets 从 TRUE 更改为 FALSE,错误停止。
这已被报告并正在处理中。他们仍然需要复制,我仍在努力隔离我可以制作的可共享数据 public:
我有以下针对 Azure 中托管的 SQL 服务器执行的 C# 代码。
protected IQueryable<T> FilterUpdatedRows<T>(IQueryable<T> query, DateTime lastSyncTimestamp) where T: class, ITimestamp
{
return query.Where(x => x.InsertTimestamp >= lastSyncTimestamp ||
(x.UpdateTimestamp.HasValue && x.UpdateTimestamp >= lastSyncTimestamp));
}
通用 (T) 是 Entity Framework 上下文 类 实现和接口,强制定义 InsertTimestamp 和 UpdateTimestamp。
在我安装 Windows 10 的 2018 年 4 月更新之前,此代码一直运行良好。Post 更新我收到以下错误...
SqlException: The incoming tabular data stream (TDS) remote procedure call (RPC) protocol stream is incorrect. Parameter 2 (""): Data type 0x00 is unknown.
我确认导致问题的参数是 InsertTimestamp 和 UpdateTimestamp 字段。
此错误仅在我将我的 SQL 数据库副本定位到 Azure 时发生。将数据库导出到本地数据库没有问题。未升级到 2018 年 4 月更新的团队成员在打 Azure 版本时没有问题。
我 运行 在我的本地版本上进行了 SQL 跟踪并捕获了正在执行的 SQL 语句。 运行 通过 SSMS 针对 Azure 版本的声明没有问题。
这是跟踪捕获的 SQL 语句 ...
exec sp_executesql N'SELECT
[Extent1].[CrossingId] AS [CrossingId],
... Misc other fields ...
[Extent1].[CrossingInstanceId] AS [CrossingInstanceId]
FROM (SELECT
[V_SYNC_CrossingsSync].[CrossingId] AS [CrossingId],
... Misc other fields ...
[V_SYNC_CrossingsSync].[CrossingInstanceId] AS [CrossingInstanceId]
FROM [dbo].[V_SYNC_CrossingsSync] AS [V_SYNC_CrossingsSync]) AS [Extent1]
WHERE ([Extent1].[InsertTimestamp] >= @p__linq__0) OR (([Extent1].[UpdateTimestamp] IS NOT NULL) AND ([Extent1].[UpdateTimestamp] >= @p__linq__1))',N'@p__linq__0 datetime2(7),@p__linq__1 datetime2(7)',@p__linq__0='1980-01-01 00:00:00',@p__linq__1='1980-01-01 00:00:00'
对可能发生的事情有什么想法吗?
谢谢
临时解决方法: 根据 ChainbridgeTech 在我的连接字符串中将 MultipleActiveResultSets 从 TRUE 更改为 FALSE,错误停止。
这已被报告并正在处理中。他们仍然需要复制,我仍在努力隔离我可以制作的可共享数据 public: