【发布时间】:2020-07-17 08:08:34
【问题描述】:
我有 2 个相同服务的实例在不同的机器上运行。这是为了确保高可用性(如果一台机器宕机,杀死第一个服务,那么第二个仍然可用)。
当触发总线事件时,这两个服务会同时更新和删除 SQL Server 表中的相同行。所以,我通常会在总线事件引发时得到一个 LinqToSql ChangeConflictException。
为了处理这个问题,我目前用try catch 包围SubmitChanges 并且在ChangeConflictException 的情况下什么都不做。
有没有更干净的方法?
是否可以使用 Linq to SQL 锁定整个表? (以便其中一项服务在尝试更新之前等待锁被释放)。
【问题讨论】:
-
创建一个单独的表。把桌子锁在上面。运行您的原始代码。释放表锁。
-
如何使用 linqtosql 锁定表?
-
谢谢;这很有趣。然而这是 t-sql,而不是直接使用 linqtosql。我试图避免这种情况(以及存储过程)
-
如果您要锁定表,也可以使用isolation level
serializable。但这会产生一大堆其他问题。
标签: c# sql-server linq-to-sql microservices event-driven