c# - 如何在 Entity Framework 4 中获取 SQL 2008 的下一个主键

标签 c# sql-server visual-studio-2010 asp.net-mvc-3 entity-framework-4

我正在使用 Entity Framework 4 连接连接到 SQL 2008 服务器来为我的应用程序执行数据库处理。

我在 Visual Studio 2010 中使用 C#,我的问题是关于由 SQL 本身递增的主键字段,我是否有可能找到数据库接下来将使用的 ID。

我不能只找到最后一项并 +1 的原因是如果我的表包含项目 1、2、3、4 和 5,删除项目 5 然后添加另一个将使下一项成为项目 6,而不是5 再次(因为我在 SQL 中使用身份规范,但必须使用它)。

我找不到任何方法,例如 Item.ID.GetNextIdentity() 或类似的方法,并且查看了很多类似的问题,但无济于事。

任何帮助将不胜感激

最佳答案

没有可靠的方法来使用自动递增的 ID 并在保存之前将其显示在表单中。那是错误的架构。如果您想在保存表单之前显示 ID,您必须:

  • 不使用自动递增列作为 ID 并自行处理唯一性
  • 当用户在初始空状态下开始创建表单时立即保存表单,最终表单确认将仅更新

为什么不能要求下一个ID?因为如果您以任何方式这样做,没有人会说收到的 ID 会真正用于您的表单。如果另一个进程/线程/应用程序在您的 ID 检索和表单持久性之间插入表单,则您显示的 ID 将分配给插入的表单。

此外,如果您在数据库中使用自动递增的主键,则无法在您的应用程序中分配键值 - 该值将不会被使用,数据库可以用自己的值覆盖它。

关于c# - 如何在 Entity Framework 4 中获取 SQL 2008 的下一个主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7038234/

相关文章:

c# - 在 C# 中保护用户指定的表名免受 SQL 注入(inject)

sql-server - 在 2 个 SQL Server 上呈现数据库,就像它们都在 1 个 SQL Server 上一样

SQL Server varchar.to Array() 或 string.toArray() 方法

c# - Visual Studio 2010 IDE 构建神秘失败,没有任何错误或警告

c - 如何使用 Visual Studio 调试 UEFI (UDK2014) Shell 应用程序

c# - 使用根持久类或基本持久对象是否有架构味道?

c# - 如何将 Web 服务从 HTTP 转换为 HTTPS

sql - 如何在 Azure Runbook 中运行 SQL 批处理?

.net - VB.NET 中的公共(public)变量和公共(public)属性有什么区别? (代码分析VS2010,CA1051 : Microsoft.设计)

c# - 在 C#.Net 中将 ParentReference 从 Google Drive Apis v2 迁移到 v3