能否用.NET EF Core UpdateData方法基于其他列生成JSON列
问题解答
不能用EF Core的UpdateData方法实现这个需求。
原因很明确:UpdateData的设计定位是针对已知主键的记录设置固定更新值,它不支持在value参数里引用同表的其他列——你写的代码里的Field、Operator会被当成C#变量,而非数据库表的列,根本没法动态拼接出基于当前行数据的JSON内容。
正确的做法还是使用你一开始的migrationBuilder.Sql()方法执行原生UPDATE语句,因为只有原生SQL支持引用当前行的其他列来生成目标JSON。如果你的数据库(比如SQL Server)支持原生JSON函数,还可以用更规范的方式生成JSON,避免手动拼接字符串可能出现的语法错误,示例如下:
-- 生成符合需求的单元素JSON数组 UPDATE [dbo].[TableName] SET ConditionalsJSON = ( SELECT Field, Operator, Value FROM [dbo].[TableName] t WHERE t.Id = TableName.Id FOR JSON PATH )
内容的提问来源于stack exchange,提问作者A. Gladkiy
相关产品推荐
相关产品推荐

