Ошибка TDS при вызовах SQL Azure Entity Framework после обновления Windows 10 за апрель 2018 г.

У меня есть следующий код C#, который выполняется на SQL Server, размещенном в 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'

Любые мысли о том, что может происходить?

Спасибо


person Nick Spring    schedule 15.05.2018    source источник


Ответы (1)


Временный обходной путь: в ChainbridgeTech измените MultipleActiveResultSets с TRUE на FALSE в моей строке подключения, и ошибка исчезнет.

Об этом сообщается, и над этим ведется работа. Им все еще нужна копия, и я все еще работаю над выделением общедоступных данных, которые я могу опубликовать:

https://github.com/Microsoft/dotnet/issues/749

person RyanCEI    schedule 16.05.2018
comment
Установка MultipleActiveResultSets решила проблему для меня. Спасибо всем. - person Nick Spring; 16.05.2018
comment
Временное решение мне не подходит - person Demodave; 18.05.2018