【发布时间】:2012-04-12 07:12:00
【问题描述】:
我有一个表(在 SQL Server 中),例如:
UserId CompanyId UserName Position
1 1 John 1
2 2 Adam 1
3 2 Nick 2
4 1 Mark 2
5 3 Jack 1
UserId 是具有自动增量的 PK。 CompanyID 是一个 FK。位置只是用户(每个公司)的顺序计数器。
当为公司插入新的用户记录(通过 LINQ)时,我希望职位也增加。目前,我获得给定 CompanyId 的职位的 MAX+1,然后将其分配给新记录。问题是并发插入操作通常会导致相同的位置值。
我尝试增加插入触发器中的位置以获得唯一性,但 LINQ 不会自动反映更新后的值。
如何通过 LINQ-to-SQL 或直接作为 TSQL 查询来解决此问题?
感谢任何帮助。谢谢!
【问题讨论】:
-
您是否尝试过在设置位置时使用 db 事务获取表的排他锁?
-
@ShoaibShaikh 我试图避免锁定表,但我会看看将其包装在事务中。
-
设置IsDbGenerated to true和AutoSync to OnInsert可以返回触发解决方案
标签: sql sql-server linq tsql linq-to-sql