Сохранение данных с параллелизмом - PullRequest
0 голосов
/ 07 мая 2018

Я работаю над проектом, который сохраняет счета.

У меня есть одна таблица для INVOICE и другая таблица для INVOICE_PRODUCTS. ID s обеих таблиц рассчитаны (last value + 1), а в таблице INVOICE у меня также есть DOCUMENT_NUMBER, который также рассчитывается (last document number + 1).

Моя проблема заключается в том, что несколько пользователей одновременно сохраняют счет-фактуру. Оба имеют одинаковый идентификатор и номер документа.

Каков наилучший способ сохранить это без одинакового идентификатора и номера документа в обоих сохранениях? Есть ли способ «заблокировать» одно сохранение, а когда оно закончится, запустить новое?

Отредактировано:

dymanoid: идентификаторы генерируются в коде:

    last = AllCustomerInvoices().Where(t => t.CUSTOMER_INVOICE_ID.ToString().StartsWith(node)).Select(t => t.CUSTOMER_INVOICE_ID).ToList().AsEnumerable().Max().ToString(); return !string.IsNullOrWhiteSpace(last) ? int.Parse(string.Concat(node, int.Parse(last.Substring(node.Length)))) : int.Parse(string.Concat(node, ("0"))); 

mjwills: я не использую столбцы IDENTITY, потому что идентификатор состоит из ID узла (каждое хранилище в виде отдельного идентификатора узла), но даже у меня был столбец идентификатора, проблема сохраняется на номер_документа

1 Ответ

0 голосов
/ 07 мая 2018

вы можете использовать транзакции в C # для решения этой проблемы. Вы можете проверить здесь, как использовать транзакции https://msdn.microsoft.com/en-us/library/86773566(v=vs.110).aspx

...