Ошибка 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 в строке подключения, и ошибка прекращается.

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

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

Другие вопросы по тегам