Автонумерация посева в MSSQL - PullRequest
1 голос
/ 08 апреля 2020

Я унаследовал приложение и внес изменения, использующие EntityFrameworks.

Изменения создавали CRUD для существующей таблицы. Я использовал леса MVC для создания контроллера и представлений. Все работает нормально, кроме Create.

При исследовании я обнаружил, что таблица, для которой я создаю код CRUD, имеет три поля: первичное поле с автонумерацией (ccID), поле nvarchar (50) (ClosureCode) и поле битов. (ccRedundant - по умолчанию 0) Поле идентификатора имеет начальное значение 1 и значение приращения 1, однако в нем есть две записи со значениями:

    ccID  ClosureCode       ccRedundant
    -1    Not Set           False
     0    Not Applicable    False

, за которыми следуют другие записи.

Код лесов передается 0 как идентификатор новой записи и как таковой ModelState.IsValid всегда имеет значение False, и новые записи не сохраняются. Редактирование, обновление и удаление работают нормально.

Я пытался установить значение ID равным -2 и Integer.MaxValue перед публикацией, но сохранение по-прежнему не удается в ModelState.IsValid, что никогда не выполняется.

Код скаффолдинга выглядит следующим образом:

    ' POST: ClosureCodes/Create
    'To protect from over-posting attacks, please enable the specific properties you want to bind to, for 
    'more details see https://go.microsoft.com/fwlink/?LinkId=317598.
    <HttpPost()>
    <ValidateAntiForgeryToken()>
    Function Create(<Bind(Include:="ccID,ClosureCode,ccRedundant")> ByVal tblClosureCode As tblClosureCode) As ActionResult


        If ModelState.IsValid Then

            Try

                db.tblClosureCodes.Add(tbClosureCode)
                db.SaveChanges()

                Return RedirectToAction("Index")

            Catch ex As Exception

                ErrorLogging.LogExceptionToLogFile(thisClass, "Create", ex)

                ViewData("Message") = ErrorLogging.ErrorString(thisClass, "Create", ex, ex.InnerException)

                Return RedirectToAction("Error")

            End Try

        End If

        Return View(tblClosureCode)

    End Function

Единственные изменения, которые я сделал в сгенерированном коде, заключались в том, чтобы добавить пробный улов вокруг бита сохранения с методом для регистрации любых исключений и перенаправления на пользовательский страница ошибки с ошибкой в ​​viewData.

Правильно ли я считаю, что наличие записи с ccID 0 является причиной, по которой созданная запись не будет сохранена? Есть ли способ обойти это.

ОБНОВЛЕНИЕ

Свойства для столбца ccID в tblClosureCodes согласно запросу:

enter image description here

...