如何在.net core3.0中使用ef core 3.0将插入选择为单个查询?
我有一个要求,其中插入时一列的值由先前插入的值确定。在下面的示例中,我们通过查看相似组的上一个条目来确定对象的处理时间,如果有任何条目,则添加5秒。然后,我们要将当前时间的最大值和计算出的时间分配给object.processOn。
查询内容如下:
if
如果随后的插入延迟大约超过300毫秒,则此方法效果很好。但是,如果延迟小于300毫秒,则无法获取先前的值。
这是现在的样子:
to_ten = [*range(1, 11)] # a list containing the numbers from 1-10
for number in to_ten:
print("{} is {}".format(number, ['even', 'odd'][number % 2]))
这是所需的输出:
var time = (from t in db.Model
where t.groupNo == object.groupNo
orderby t.processOn descending
select t.processOn).FirstOrDefault().AddSeconds(5);
object.processOn = DateTime.UtcNow > time ? DateTime.UtcNow : time;
db.Model.Add(object);
我也尝试在一个命令中做到这一点:
Id GroupNo ProcessOn
1 1 2020-06-09 22:42:22.080
2 1 2020-06-09 22:42:22.080
3 1 2020-06-09 22:42:22.080
4 1 2020-06-09 22:42:27.080
但是,这也不起作用,代码开始显得凌乱且未经优化。 在分析了ef core生成的sql查询之后,很明显,在两种情况下,它都运行两个不同的查询而不是一个插入选择查询,并且它可以解释问题。
还有其他方法可以实现或优化它吗?