Ошибка TDS в вызовах SQL Azure Entity Framework после обновления для Windows 10 апреля 2018 г.
У меня есть следующий код C#, который выполняется на сервере SQL, размещенном в Azure.
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));
}
Generic (T) - это контекстные классы Entity Framework, которые реализуют и взаимодействуют, заставляя определять InsertTimestamp и UpdateTimestamp.
Этот код работал нормально до тех пор, пока я не установил обновление Windows 10 за апрель 2018 года. После обновления я получаю следующую ошибку...
SqlException: неверный поток протокола удаленного вызова процедур (RPC) входящего потока табличных данных (TDS). Параметр 2 (""): тип данных 0x00 неизвестен.
Я подтвердил, что параметрами, вызывающими проблему, являются поля InsertTimestamp и UpdateTimestamp.
Эта ошибка возникает только тогда, когда я нацеливаюсь на свою копию базы данных SQL в Azure. Экспорт базы данных в локальную базу данных работает без проблем. Члены группы, которые не обновились до обновления апреля 2018 года, не сталкиваются с проблемой при установке версии 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'
Есть мысли о том, что может происходить?
Спасибо
1 ответ
Временное решение: Per ChainbridgeTech меняет MultipleActiveResultSets с TRUE на FALSE в строке подключения, и ошибка прекращается.
Об этом сообщалось и в настоящее время ведется работа. Они все еще нуждаются в репродукции, и я все еще работаю над выделением общих данных, которые я могу опубликовать