C# 在Linq to SQL中自动选择两个表

C# 在Linq to SQL中自动选择两个表,c#,sql,sql-server,linq-to-sql,C#,Sql,Sql Server,Linq To Sql,我正在使用Linq to SQL,我遇到了这样一种情况:我试图使用DataContext的Refresh方法更新我的实体 我正在刷新两个表,但还有一个过程可以修改其中一个表。这两个表中的数据必须同步 问题是,有时我刷新一个表时,存储过程会同时更改两个表,而我刷新的第二个表不再与另一个表同步 如何确保在Linq to SQL中刷新两个表时,它们中的任何一个都不会发生任何事情 事务将在选择表时立即锁定表,所以它不能保证在选择第一个表之后,第二个表不会被修改 代码示例: _dc.Refresh(Ref

我正在使用Linq to SQL,我遇到了这样一种情况:我试图使用
DataContext
Refresh
方法更新我的实体

我正在刷新两个表,但还有一个过程可以修改其中一个表。这两个表中的数据必须同步

问题是,有时我刷新一个表时,存储过程会同时更改两个表,而我刷新的第二个表不再与另一个表同步

如何确保在Linq to SQL中刷新两个表时,它们中的任何一个都不会发生任何事情

事务将在选择表时立即锁定表,所以它不能保证在选择第一个表之后,第二个表不会被修改

代码示例:

_dc.Refresh(RefreshMode.KeepChanges, _dc.Table1);
// here Table2 might be changed by procedure, I need to prevent it
_dc.Refresh(RefreshMode.KeepChanges, _dc.Table2);

事务中的select只会在表上放置一个共享锁,并且仅在实际读取数据期间(在默认隔离级别下),这不会阻止“另一方”进行更新,我相信…@marc_s所以唯一的方法就是将此选择移动到存储过程?否-您可以调查隔离级别(这些级别会改变共享锁保留时间的行为),或者您可以使用诸如
XLOCK
(独占锁)和
HOLDLOCK
(保持锁)之类的提示进行选择我不担心刷新,因为服务器应该自动执行锁定。我会担心创建新的主键。共享数据库时,必须在存储过程中创建主键,以便两个不同的用户不会创建重复的键。事务中的select只会在表上放置共享锁,并且仅在实际读取数据期间(在默认隔离级别)才会停止“其他”操作我相信,…@marc_s所以唯一的方法是将此选择移动到存储过程?否-您可以调查隔离级别(这些级别会改变共享锁保留时间的行为),或者您可以使用诸如
XLOCK
(独占锁)和
HOLDLOCK
(保持锁)之类的提示进行选择我不担心刷新,因为服务器应该自动执行锁定。我会担心创建新的主键。共享数据库时,必须在存储过程中创建主键,以便两个不同的用户不会创建重复的键。