У меня есть вопрос, который смешивает SQL-сервер, Entity Framework и Web API.
Мне нужно управлять базой данных серийных номеров. Для этого я создал таблицу последовательности на своем сервере SQL. Сначала я использую код EF6.
public class Sequence : ITrackingDate
{
[Key]
public string Name { get; set; }
public long CurrentValue { get; set; }
public long Increment { get; set; }
public long MinimumValue { get; set; }
public long MaximumValue { get; set; }
public bool IsCycling { get; set; }
public DateTime CreateDate { get; set; }
public DateTime ModifyDate { get; set; }
}
ITrackingDate используется для обновления моих CreateDate и ModifyDate в текстовом формате EF. Я перезаписываю SaveChange.
Это должно работать как последовательность (как в SQL Server 2012), но я хочу управлять ею самостоятельно в конкретной базе данных, потому что мне нужно будет создать много последовательностей, и большинство из них будет содержать больше данных, чем то, что мы имеем только в система базовых последовательностей. Одна функция, которая мне нужна, - это возможность обновлять последовательность по диапазону.
var serial = context.Sequences.SingleOrDefault(y => y.Name == serialName);
var firstValue = serial.CurrentValue + 1;
var lastValue = serial.CurrentValue + range;
serial.CurrentValue = lastValue;
context.SaveChanges();
Этот код находится за веб-сервисом, поэтому может быть возможно, что 2 запроса, выполненных в один и тот же момент времени, которые выполняют этот раздел кода в одно и то же время, возвращают одно и то же значение. Этого никогда не должно случиться.
Таким образом, метод SaveChanges () должен также проверять, что сохраняемое мной, не является безопасным для другого потока, так как read ().