EF事务回滚是否对同时到达的其他请求有影响?

Does EF Transaction rollback have an effect on other requests that arrives at the same time?

我在 C# 应用程序中使用 entity framework6。

我有以下逻辑

using (var context = new MyContext())
{
    using (var dbContextTransaction = context.Database.BeginTransaction())
    {
        try
        {
            // Do LogicA
            // Insert a new user to the database 
            context.SaveChanges();

            // Take the inserted userID. 
            // Do LogicB
            context.SaveChanges();

            dbContextTransaction.Commit();
            return user;
        }
        catch (Exception)
        {
            dbContextTransaction.Rollback();
            return null;
        }

    }
}

基本上,我将一个用户插入到 LogicA 中的数据库中,我需要他的 ID(从数据库中获取,插入后)才能继续 logicB。这就是为什么我要进行 2 次保存更改。第一个为了得到userID。

我添加了一个事务,因为有时 LogicB 可能会抛出异常,如果发生这种情况,我想回滚所做的更改(从数据库中删除用户)

该逻辑工作正常,但我有一个问题:

假设同时发出了 2 个请求,并且发生了这种特定情况:

请求 1请求 2 在同一时间到达

场景:

请求 1执行 LogicA,插入 user1 并保存更改

请求 2执行 LogicA,插入 user2 并保存更改

请求 1 获取 user1 的 Id,执行 LogicB,异常发生,通过删除 user1 回滚更改,returns null

请求2获取user2的Id,做LogicB,LogicB没有抛出异常,一切正常,returnsuser2

由于这个场景很难重现,所以我想问一个让我担心的事情:

最后的问题:)

如果请求插入用户1失败,而用户2成功,那么user2的数据库ID会不会改变? (因为当我回滚时 user1 被删除了)用户 2 是否更改了他的 ID 以适应另一个请求中发生的回滚,或者他是否保留了最初分配的相同 ID? (我是说他的数据库 ID)

希望我说清楚了 感谢您的任何澄清,

我假设 "database ID" 是 SQL 服务器中的一个 IDENTITY 列。身份号码从来都不是交易的一部分。它们是独立绘制的。

ID 生成后永远不会改变。在回滚情况(和其他情况)中也可能存在 ID 间隙。

不保证 ID 是连续的。它们只是计数器。