我们正在使用另一种解决方案,您可以使用它来避免使用存储过程,特别是如果您像我们一样使用 EF Code First。Code First 不支持使用存储过程。
解决方案是在事务范围内使用 EF 的 SqlQuery 方法,您必须编写一个查询,首先更新下一个数字计数器,然后选择 It 。代码将是:
string query = "UPDATE Registre_Counter SET Counter = Counter + 1 WHERE CounterName = @p0 AND Year = @p1;";
query += "select * from Registre_Counter Where CounterName = @p0 AND Year = @p1";
GenericCounter GenericCounter = CoreDBContext.Instance().GenericCounter.SqlQuery(query, new Object[] { _counterName, _year }).SingleOrDefault(); //Updates the counter and return de NextNumber to Use
更新将锁定计数器并避免读取其上的其他事务,直到事务中止或提交。