У меня есть некая сущность, у которой есть три столбца, два из которых являются последовательными.
Как мне подойти к моделированию объекта таким образом, чтобы для каждого отдельного столбца Package соответствующий столбец Group увеличивался, когда столбец Record Number достигал определенного максимального значения, после чего столбец Record Number также сбрасывался.
Ниже показано, как я бы хотел, чтобы моя модель работала, если бы максимальное значение было 4.
Пока мне удалось сделать столбец Record Number автоматически сгенерированной последовательностью, используя
modelbuilder.ForSqlServerHasSequence<int>("Package_seq", schema: "dbo")
.StartsAt(0).IncrementsBy(1);
modelBuilder.Entity<Package>()
.Property(o => o.RecordNumber)
.HasDefaultValueSql("NEXT VALUE FOR dbo.Package_seq");
но я понятия не имею, что делать дальше.
@ Нет, выполнение этого на уровне приложения может вызвать ошибки, потому что это не сработает, когда несколько человек вставляют данные одновременно, если у меня нет способа ограничить выполнение запросов последовательно ...
Возможно, вы сможете использовать блокировка приложения. Но если вы зайдете так далеко, я думаю, вы могли бы вместо этого просто написать хранимую процедуру вставки.
@ Нет, хорошо, спасибо за понимание
Вы можете использовать транзакции, чтобы гарантировать, что при чтении данных они не изменятся перед записью новой записи. docs.microsoft.com/en-us/ef/core/saving/transactions





Если бы мне пришлось сделать это в БД, я бы, вероятно, написал хранимую процедуру
dbo.InsertPackage, котораяSELECTзаписала последнюю запись для рассматриваемогоPackageи рассчитала эти числа соответственно. Но я бы сразу сделал это на своем прикладном уровне, если бы мог.