Существует еще одно решение, которое мы используем, и вы можете использовать его, чтобы избежать использования Процедур Магазина, особенно если вы используете EF Code First, как мы.Code First не поддерживает использование процедур хранения.
Решение использует метод EF SqlQuery в рамках транзакции, вы должны написать запрос, который сначала выполняет обновление счетчика следующего числа,затем выберите его.Код будет:
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
Обновление заблокирует счетчик и предотвратит чтение из других транзакций, пока транзакция не будет прервана или зафиксирована.