环境:.net 5 和Oracle 11g
问题:在EF CORE 使用ctx.Database.ExecuteSqlInterpolatedAsync()方法更新数据时,因为这个方法会自动吧内插值转化为SQL占位符执行,所以出现了以外的错误(并非代码报错),代码如下图
主要看下面的那条for循环的插入语句(代码无错误!!)。
为了方便展示只更新了一次,实际上我是想,把所有Title列是Title5的数据变成 j+Title的形式,但是由于使用了{j}来向SQL字符串中传入数据,所以导致自动转换为占位符,导致插入了“:p0Title”这个样子的数据,
发送LOG后看到SQL代码如下图
一对比就会发现第一个{j}部分变成了 :p0,这没问题,占位符嘛,但是!插入之后表中数据直接就变成了:p0Title,关键是!后面的Id={j} 没有问题,正确的找到了Id(我觉得可能是因为第一个{j}后面有字符的原因),所以想问一下这种样子怎么在这个代码或者这个思想的基础上,把代码变正确
依旧要使用ctx.Database.ExecuteSqlInterpolatedAsync()方法,因为同样的代码我在使用ctx.Database.ExecuteSqlRawAsync()方法后就成功了(我知道是因为他会直接穿完整的不修改的字符),但是ctx.Database.ExecuteSqlRawAsync()不能防止SQL注入漏洞攻击,所以想要依旧使用ctx.Database.ExecuteSqlInterpolatedAsync()方法。
望解答,感谢!