【问题标题】:Autonumber seeding in MSSQLMSSQL 中的自动编号播种
【发布时间】:2020-04-08 16:53:27
【问题描述】:

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

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

经过调查,我发现我正在为其创建 CRUD 代码的表具有三个字段:一个自动编号的主字段 (ccID)、一个 nvarchar(50) 字段 (ClosureCode) 和一个位字段 (ccRedundant - 默认 0) ID 字段种子为 1,增量为 1,但它有两条记录的值:

ccID ClosureCode ccRedundant -1 未设置为假 0 不适用 假

随后是其他记录。

脚手架代码将 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 的记录是 Created 记录无法保存的原因?有没有办法解决这个问题。

更新

请求的 tblClosureCodes 中 ccID 列的属性:

【问题讨论】:

  • 你能从你的模型中发布自动增量字段的属性定义吗?据我所知,EF 不应该如何处理这个问题,也不需要设置任何值。 tblClosureCode.ccrID 是否使用 DatabaseGenerated 属性修饰?
  • @RossBush 按要求添加了属性定义
  • 该字段未在您的数据库架构中定义为 IDENTITY。
  • @RossBush 抱歉,我必须双击该列并将其设置为否...我已更新图像...该字段定义为 IDENTITY。我怀疑在某个阶段它不是并且添加了 -1 和 0 记录,然后 IDENTITY 设置为种子 1 和增量 1...我想不出其他任何方式来创建这些记录。
  • EF 应该能够处理自增字段。您能否发布该字段的 EF 生成代码定义。是否只想删除 0 和 -1 的记录?

标签: asp.net-mvc vb.net entity-framework


【解决方案1】:

IDENTITY(种子和增量)似乎是在以后设置的。我从 EF 图中删除了该表,然后使用从数据库中更新模型来恢复图中的表。这解决了我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多