锁定DB记录的插入只发生一次

时间:2012-12-06 15:44:53

标签: c# locking mutex

我是C#的新手并遇到了这个问题:

我有一个.aspx页面,可以接受参数eventId

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

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

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

比如说,2个客户端同时请求eventId = 7的页面 - 该事件的行可能会插入两次。

如何使用Mutex / Lock / Monitor或其他任何东西来避免这种情况?

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

提前致谢...

2 个答案:

答案 0 :(得分:1)

您的数据库中的

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

答案 1 :(得分:0)

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

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