|
добавление записи посредством EF.
|
|||
---|---|---|---|
#18+
Доброго времени суток! В приложении .Net MVC 3 добавляются документы, база в MS SQL 2008, в таблице документа есть поле Doc_id типа int identity(1,1). В контроллере GET задается новый экземпляр моего объекта, в POST проходят проверки и сохранение его в базу посредством EF. Оно задано в качестве первичного ключа и участвует в формировании номера документа при его печати. Удалить введенный документ в приложении нельзя. Проблема в том, что временами получаются промежутки в последовательности например - id=1,2,3,4,8,10,11, т.е. в таблицу не записаны документы с ИД 5 и 9, но счетчик Identity по какой-то причине перескочил. Этих промежутков в общем хотелось бы избежать, но интереснее понять причину такого поведения identity. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2017, 07:35 |
|
добавление записи посредством EF.
|
|||
---|---|---|---|
#18+
denis_viktorovich интереснее понять причину такого поведения identity. MS SQL при откате транзакции счетчики не откатывает. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2017, 07:43 |
|
добавление записи посредством EF.
|
|||
---|---|---|---|
#18+
denis_viktorovichПроблема в том, что временами получаются промежуткипроблема как раз в этом:denis_viktorovichОно задано в качестве первичного ключа и участвует в формировании номера так не делают ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2017, 08:22 |
|
добавление записи посредством EF.
|
|||
---|---|---|---|
#18+
denis_viktorovichно интереснее понять причину такого поведения identity.представь, что два человека почти одновременно начали сохранять документ, сначала один, потом второй. При этом, второй дошел до конца, а первый не сохранил документ по какой-то причине. Что теперь счетчику делать - искать свободные промежутки? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2017, 08:25 |
|
добавление записи посредством EF.
|
|||
---|---|---|---|
#18+
Shocker.Pro, это я понимаю, похоже вся проблема в том, что я часть проверок реализовал в приложении, а часть в констрейнах. Вот во втором случае при попытке выполнить insert счетчик увеличивается, а запись понятное дело не записывается. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2017, 08:33 |
|
добавление записи посредством EF.
|
|||
---|---|---|---|
#18+
Shocker.Prodenis_viktorovichПроблема в том, что временами получаются промежуткипроблема как раз в этом:denis_viktorovichОно задано в качестве первичного ключа и участвует в формировании номера так не делают - да, но в постановке к номеру, кроме уникальности и возможности поиска, никаких требований не было, потому привязал к счетчику. Он не сбрасывается в ноль в конце месяца, нумерация не внутри каждого подразделения, просто сквозной номер. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2017, 08:43 |
|
добавление записи посредством EF.
|
|||
---|---|---|---|
#18+
denis_viktorovichк номеру, кроме уникальности и возможности поиска, никаких требований не былотогда в чем проблема? требования непрерывности не было, ну и славно )) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2017, 09:08 |
|
добавление записи посредством EF.
|
|||
---|---|---|---|
#18+
denis_viktorovichв постановке к номеру, кроме уникальности и возможности поиска, никаких требований не было. Ну и забей на дырки в нумерации, это не криминал. Номера не надо мешать с ID, вообще не надо пытаться дать какой-то другой смысл абстрактному ключу. Завтра попросят каждый год нумерацию документов с 1 начинать и приплыли. Был случай: бухгалтерия что-то накосячила и для исправления им надо было сделать второй документ с существующим номером. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2017, 09:24 |
|
добавление записи посредством EF.
|
|||
---|---|---|---|
#18+
denis_viktorovichЭтих промежутков в общем хотелось бы избежать, но интереснее понять причину такого поведения identity. Хочешь избежать, генерируй сам, программно. Конечно тебе придётся столкнуться с попытками приложения добавить две записи с одним и тем же ID, с последующим крэшем, но это ничего. Главное промежутков нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2017, 11:16 |
|
|
start [/forum/topic.php?fid=17&fpage=8&tid=1349304]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
81ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 194ms |
0 / 0 |