0

我是 C# 新手,有一个问题:

我有一个.aspx接受参数的页面eventId

在第一次使用特定请求此页面时eventId,我需要在数据库中插入一些对该事件唯一的行。

使用 that 请求页面的所有其他时间eventId,都不应插入任何行。

我可以查询数据库以查看该事件是否已经存在这些行,但这不会防止并发问题。

假设有 2 个客户eventId = 7同时请求该页面 - 该事件的行可能会被插入两次。

如何使用互斥锁/锁定/监视器或其他任何东西来避免这种情况?

我需要通过字符串识别锁定机制 - 事件 ID

提前致谢...

4

2 回答 2

1

在您的数据库中创建一个基于事件 ID 的唯一索引。在您的 asp 页面上始终插入并处理插入失败的情况。如果插入失败,则事件 ID 已被其他人使用。在这个设计中,数据库进行同步。

于 2012-12-06T15:50:24.900 回答
0

“如果事件 id 已经存在则读取”和“插入该事件 id”方法应该在事务中运行。如果您使用 TransactionScope,您可以将隔离级别设置为 Serializable,这将确保您永远不会在数据库级别进行并发访问,因此您可以防止插入两次事件。

但是,我还会在数据库中的该字段上添加一个唯一键索引,就像 opi 建议的那样。

于 2012-12-06T16:04:05.570 回答