SQL Server 中的自动编号播种

问题描述 投票:0回答:1

我继承了一个应用程序并使用 Entity Framework 进行了更改。

更改是为现有表创建 CRUD。我使用 MVC 脚手架来创建控制器和视图。除 Create 外,一切正常。

在调查中,我发现我正在为其创建 CRUD 代码的表具有三列,一个自动编号的主列(

ccID
),一个
nvarchar(50)
列(
ClosureCode
)和一个位列(
ccRedundant
-默认0 ). ID 列的种子为 1,增量为 1,但它有两个值的记录:

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

之后是其他记录。

脚手架代码传递 0 作为新记录的 ID,因此

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

我对生成的代码所做的唯一更改是在保存位周围添加一个 try catch,并使用一种方法记录任何异常并重定向到带有 viewData 错误的自定义错误页面。

我是否认为 ccID 为 0 的记录的存在是创建的记录不会保存的原因?有没有办法解决这个问题。

更新

根据要求为 tblClosureCodes 中的 ccID 列设置属性:

asp.net-mvc vb.net entity-framework
1个回答
0
投票

IDENTITY (Seed and Increment) 好像是后来设置的。我从 EF 图表中删除了表,然后使用从数据库更新模型来恢复图表中的表。这解决了我的问题。

© www.soinside.com 2019 - 2024. All rights reserved.