我正在使用Entity Framework 4连接来连接到SQL 2008服务器,以便为我的应用程序执行数据库处理。
我在Visual Studio 2010中使用C#,我的问题是关于SQL本身增加的主键字段,我是否有可能找到数据库接下来要使用的ID。
我不能只找到最后一项和+1的原因是因为如果我的表包含项目1,2,3,4和5,删除项目5然后添加另一项将使下一项目成为项目6,而不是5再次(因为我在SQL中使用身份规范,但必须使用它)。
我找不到任何方法,例如Item.ID.GetNextIdentity()或类似的东西,并查看了很多这样的类似问题,但无济于事。
任何帮助将不胜感激
答案 0 :(得分:9)
在执行保存之前,没有可靠的方法来使用自动递增的ID并在表单中显示它。这是错误的架构。如果您想在保存表单之前显示ID,则必须:
为什么你不能要求下一个身份证?因为如果你以任何方式这样做,没有人说收到的ID将真正用于你的表格。如果另一个进程/线程/应用程序在您的ID检索和表单持久性之间插入表单,则您显示的ID将被分配给该插入的表单。
此外,如果您在数据库中使用自动递增的主键,则无法在应用程序中分配键值 - 不会使用该值,数据库可以使用自己的值覆盖它。
答案 1 :(得分:0)
非常同意Ladislav Mrnka,但是,可能需要这种功能。 一个旁路建议是:
// Insert existing object in data base via EF, but PK is missing ...
using (var Es = new MyEntities())
{
try
{
// Allows you to get next pk
var e = new Model.TableXXX();
// Set pk to existing entity which has no pk
existingEntity.PkField = e.PkField;
// Save existing object and let garbage collector take care
// of newly created entity
Es.TableXXX.AddObject(existingEntity);
Es.SaveChanges();
}
catch (Exception ex)
{
// implement exception
}
}
答案 2 :(得分:-1)
DBCC CHECKIDENT ( table_name, NORESEED )
返回当前标识值和标识列的当前最大值。