#c# #sql #asp.net-core #entity-framework-core
#c# #sql #asp.net-core #entity-framework-core
Вопрос:
Это хороший способ установить уровень транзакции на сериализуемый? Если я установлю более низкий уровень транзакции, я получу повторяющиеся заказы. Какой подход лучше? Я предполагаю, что этот метод будет часто вызываться разными пользователями.
Вот мой код
using (var tran = context.Database.BeginTransaction(IsolationLevel.Serializable))
{
try
{
var lastDocument = context.Documents.OrderByDescending(x => x.Id).FirstOrDefault();
int order = 1;
if (lastDocument != null)
{
order = lastDocument.Order 1;
}
var document = new Document
{
CreatedDate = DateTimeOffset.UtcNow,
Name = Guid.NewGuid().ToString(),
Order = order
};
context.Documents.Add(document);
context.SaveChanges();
tran.Commit();
}
catch (Exception ex)
{
tran.Rollback();
}
}
Комментарии:
1.
Is this a good way to set the transaction level to serializable?
Работает ли это?2.
order = lastDocument.Order 1;
Это кричит «ужасная идея». Почему вы не используетеIDENTITY
столбец?3. @mjwills 1. Работает, но медленно 2. Поскольку пользователь может изменять порядок в приложении spa, это что-то вроде перетаскивания
4. Почему пользователю важно, какой номер заказа? Его должна генерировать база данных, а не приложение.
5.
1.Works but slowly
Для меня звучит как сериализуемый. 🙂