Это странный случай: у нас есть конечная точка Web API, которая периодически начинает выдавать эту ошибку для каждого сообщения, отправленного на любой метод контроллера POST любого контроллера, даже если ни один из код, вызываемый этими контроллерами, касается qrySoaHeader_Net
:
«Представление или функция« dbo.qrySoaHeader_Net »не могут быть обновлены, поскольку
модификация затрагивает несколько базовых таблиц. "
Я полностью понимаю, что обычно означает это сообщение (вы пытаетесь записать в представление, которое не преобразуется однозначно в одну таблицу), но это определенно не то, что происходит в этом случае.
qrySoaHeader_Net
- это представление SQL Server, используемое классом сущностей EF (SoaHeader
) для извлечения данных для отчета. Ни один из методов POST ни на одном из наших контроллеров не касается SoaHeader
напрямую, и ни один из других вызываемых ими объектов не связан с ним в EF (потому что это представление, поэтому не имеет никаких связей в БД).
Если я копирую базу данных обратно локально, я не получаю эту проблему, и если я перезапускаю производственный IIS, проблема исчезает, а затем снова появляется через неделю или около того.
Вызовы методов GET на контроллерах по-прежнему работают нормально, проблема заключается только в POST - все методы GET вызывают код, который только извлекает данные.
Мне кажется, это должно быть проблемой из-за того, что что-то «зависло» на IIS или SQL Server? Я проверил на открытый транс с DBCC OPENTRAN
, но их нет.
Рабочий сервер работает под управлением Microsoft SQL Server 2017 (окончательная первоначальная версия) - 14.0.1000.169 (X64) Express Edition (64-разрядная версия) в Windows Server 2016 Datacenter 10.0 (сборка 14393:) (гипервизор).
Моя машина работает под управлением Microsoft SQL Server 2017 (RTM-GDR) (KB4293803) - 14.0.2002.14 (X64) Developer Edition (64-разрядная версия) в Windows 10 Pro 10.0 (сборка 17134:)
Кто-нибудь может подумать о том, что может вызвать появление этой ошибки, независимо от того, к какой конечной точке отправляется сообщение?