【发布时间】:2017-05-13 13:28:55
【问题描述】:
我有一个带有“contacts”表的 sql server,在这个表中我有 int 类型的列“clicks”,我想在不进行查询的情况下增加它的值。
这是:“Entity framework update one column by increasing the current value by one without select”的副本 建议的解决方案是使用EntityFramework.Utilities 问题是它不是像 EntityFramework.Extended 这样的 IQueryable 扩展,这让我很难实现。
问题是否有任何其他方法/解决方案可以使用 IQueryable(不实际编写 sql 查询)在 sql 上增加 int 值?
IQueryable 查询的结果应如下所示:
UPDATE Contacts SET clicks=clicks+1 WHERE id=8432
【问题讨论】:
-
在sql server中查找SEQUENCE; msdn.microsoft.com/en-us/library/ff878091.aspx
-
我没有找到任何简单的方法来使用 sql server SEQUENCE 和实体框架
-
您正试图用锤子驱动螺丝。您所要求的与序列、ID 或实体无关。这意味着您没有对象或映射,因此您不需要 ORM。正确的方法是使用例如 eSQL 或原始 SQL 来使用参数执行 UPDATE 语句。更好的是,创建并调用存储过程
-
另一个非常重要的问题。原始代码不会受到并发冲突的影响。进行多少并发更新并不重要,该值始终正确递增。另一方面,多个线程在客户端更新值并保存它们的任何尝试都将导致并发冲突。
-
@MohammadBarbast 我不确定它是否相同,但下面的解决方案基于使用称为 EF Extended 的额外库,目前称为 EF plus,请参阅:entityframework-plus.net/ef-core-batch-update
标签: c# entity-framework lambda