gpt4 book ai didi

c# - Entity Framework - 在事务内检索 'SaveChanges' 之前的 ID

转载 作者:IT王子 更新时间:2023-10-29 03:48:32 27 4
gpt4 key购买 nike

在 Entity Framework 中 - 在调用“SaveChanges”之前,是否有任何方法可以在事务中检索新创建的 ID(身份)?

我需要第二个插入的 ID,但它始终返回为 0...

        ObjectContext objectContext = ((IObjectContextAdapter)context).ObjectContext;

objectContext.Connection.Open();

using (var transaction = objectContext.Connection.BeginTransaction())
{
foreach (tblTest entity in saveItems)
{
this.context.Entry(entity).State = System.Data.EntityState.Added;
this.context.Set<tblTest>().Add(entity);

int testId = entity.TestID;

.... Add another item using testId
}

try
{
context.SaveChanges();
transaction.Commit();
}
catch (Exception ex)
{
transaction.Rollback();
objectContext.Connection.Close();
throw ex;
}
}

objectContext.Connection.Close();

最佳答案

ID是在行插入表后由数据库生成的。在插入行之前,您不能询问数据库该值是什么。

您有两种解决方法 - 最简单的方法是调用 SaveChanges。由于您在事务中,因此在获取 ID 后出现问题时可以回滚。

第二种方法是不使用数据库内置的 IDENTITY 字段,而是自己实现它们。当您有大量批量插入操作时,这可能非常有用,但它需要付出代价 - 实现起来并不容易。

编辑:SQL Server 2012 有一个内置的 SEQUENCE 类型,可以用来代替 IDENTITY 列,无需自己实现。

关于c# - Entity Framework - 在事务内检索 'SaveChanges' 之前的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17523568/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com