0

我有一个包含 TranRefId 的 Transaction 表(用于将购买和撤消交易组合在一起)。与 SQL 数据库的接口使用的是 Entity Framework 4。我希望能够做两件事......

  1. 显式指定 TranRefId 的值
  2. 未指定时自动生成一个值(无论是通过查询 MAX 并递增还是通过其他方式)。

由于这是一个 Web 应用程序,我担心可能会有多个线程同时执行此操作。如果我选择 Max(TranRefId) 并增加值,则很有可能多个事务最终会得到相同的值(由于并发性)。 实体框架中是否有任何解决方案可以帮助解决此类并发问题?


此外,TranRefId 仅特定于帐户。请参阅下面的示例数据...

交易表 (我很抱歉,不知道如何在此处制作表......)

TranId_ _ TranRefId _ _Account

1_ _ __ _ ____ 1 _ __ _ __ _ _ A
2
_ __ _ __ _ __ 1 _ __ _ __ _ _ A
3
_ __ _ __ _ __ 1 _ __ _ ____ B
4
_ __ _ __ _ __ 2 _ _ _ ____ B
5
_ __ _ ___ __ 1 _ __ _ __ _ _C

4

2 回答 2

1

如果您不必将 TranRefId 列作为 int,则可以将其设为唯一标识符。然后您可以生成一个新的 Guid 并将其值设置为 - 知道它始终是唯一的。

于 2012-09-06T14:55:39.530 回答
1

我猜你可以在表上添加另一个自动列,并在触发器中(耶!)检查是否设置了值,如果没有移动自动列值。

于 2012-09-07T12:07:14.147 回答