视图或函数 [视图名称] 不可更新,因为修改会影响多个基表 - 在 POST 上对任何和每个控制器
View or function [view name] is not updatable because the modification affects multiple base tables - On POST to any and every controller
这很奇怪:我们有一个 Web API 端点,它定期开始为 每个 post 提交到 抛出此错误]any POST 任何控制器的控制器方法,即使这些控制器调用的代码的 none 触及 qrySoaHeader_Net
:
"View or function 'dbo.qrySoaHeader_Net' is not updatable because the
modification affects multiple base tables."
我完全理解该消息通常意味着什么(您正在尝试写入一个不能唯一解析为单个 table 的视图),但在这种情况下绝对不是这样。
qrySoaHeader_Net
是一个 SQL 服务器视图,由 EF 实体 class (SoaHeader
) 用来检索报表数据。我们任何控制器上的 POST 方法中的 None 直接接触 SoaHeader
并且它们调用的其他对象中的 none 在 EF 中链接到它(因为它是一个视图,所以在数据库中没有关系)。
如果我将数据库复制回本地,则不会出现此问题,如果我重新启动生产 IIS,问题就会消失,然后在一周左右后再次出现。
控制器上对 GET 方法的调用继续正常工作,只是 POST 似乎有问题 - GET 方法都是仅检索数据的调用代码。
对我来说,这表明这一定是在 IIS 或 SQL 服务器上获取 'stuck' 的问题?我用 DBCC OPENTRAN
检查了开放式传输,但没有。
生产服务器是运行 Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64) Express Edition (64-bit) on Windows Server 2016 Datacenter 10.0 (Build 14393: )(管理程序)。
我的机器是 运行 Microsoft SQL Server 2017 (RTM-GDR) (KB4293803) - 14.0.2002.14 (X64) Developer Edition (64-bit) on Windows 10专业版 10.0(内部版本 17134:)
无论 posted 到哪个端点,谁能想到什么会导致抛出此错误?
看看你的DI。这可能是由 leaking/sharing 个 DbContext 实例引起的。如果 POST 控制器获得一个 DbContext 实例,其中包含一个跟踪的、更改的 SoaHeader 对象,它会在您调用 SaveChanges 时尝试保存它。
这很奇怪:我们有一个 Web API 端点,它定期开始为 每个 post 提交到 抛出此错误]any POST 任何控制器的控制器方法,即使这些控制器调用的代码的 none 触及 qrySoaHeader_Net
:
"View or function 'dbo.qrySoaHeader_Net' is not updatable because the modification affects multiple base tables."
我完全理解该消息通常意味着什么(您正在尝试写入一个不能唯一解析为单个 table 的视图),但在这种情况下绝对不是这样。
qrySoaHeader_Net
是一个 SQL 服务器视图,由 EF 实体 class (SoaHeader
) 用来检索报表数据。我们任何控制器上的 POST 方法中的 None 直接接触 SoaHeader
并且它们调用的其他对象中的 none 在 EF 中链接到它(因为它是一个视图,所以在数据库中没有关系)。
如果我将数据库复制回本地,则不会出现此问题,如果我重新启动生产 IIS,问题就会消失,然后在一周左右后再次出现。
控制器上对 GET 方法的调用继续正常工作,只是 POST 似乎有问题 - GET 方法都是仅检索数据的调用代码。
对我来说,这表明这一定是在 IIS 或 SQL 服务器上获取 'stuck' 的问题?我用 DBCC OPENTRAN
检查了开放式传输,但没有。
生产服务器是运行 Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64) Express Edition (64-bit) on Windows Server 2016 Datacenter 10.0 (Build 14393: )(管理程序)。
我的机器是 运行 Microsoft SQL Server 2017 (RTM-GDR) (KB4293803) - 14.0.2002.14 (X64) Developer Edition (64-bit) on Windows 10专业版 10.0(内部版本 17134:)
无论 posted 到哪个端点,谁能想到什么会导致抛出此错误?
看看你的DI。这可能是由 leaking/sharing 个 DbContext 实例引起的。如果 POST 控制器获得一个 DbContext 实例,其中包含一个跟踪的、更改的 SoaHeader 对象,它会在您调用 SaveChanges 时尝试保存它。