asp.net-mvc - MSSQL 中的自动编号播种
问题描述
我继承了一个应用程序并进行了使用 EntityFrameworks 的更改。
更改是为现有表创建 CRUD。我使用 MVC 脚手架来创建控制器和视图。除创建外,一切正常。
在调查中,我发现我正在为其创建 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 列的属性:
解决方案
似乎 IDENTITY(种子和增量)是在以后设置的。我从 EF 图中删除了该表,然后使用从数据库中更新模型来恢复图中的表。这解决了我的问题。
推荐阅读
- c - 如何解决 C 代码的 MISRA C:2012 规则 13.2 和 13.3?
- ruby-on-rails - 为使用令牌而不是 ID 查找的方法设置路线?
- javascript - 如何防止我的平滑滚动 jquery 函数修改我的 div 元素的内容?
- azure - 如何使用 StackExchange.Redis 为 Azure Redis 缓存的所有键全局设置键过期值?
- javascript - 如何从 Materialise 下拉菜单中获取多个选项以自动查询 API?
- python - Groupby 多个属性并传递结果/保存到_excel
- javascript - 除非我将 console.log(this.state) 包装在 setTimeout 中,否则无法在 .then(json) fetch 调用之外访问 this.state 或 this.props
- azure - ADLS Gen 1 与 ADLA U-SQL 作业的通用存储 Blob 相比性能较差
- angular - 调整mat-form-field Angular Material的高度
- jpa - 在 JPA 中,如何读取 Sybase 存储过程的返回值?