MS SQL - 以C#方式原子读取多个表

时间:2013-09-20 16:29:07

标签: c# sql-server database transactions sqltransaction

想象一下,有一个用C#编写的程序,其中有object (A)引用了2组objects ( set of B, set of C)

这些对象存储在MS SQL TableATableBTableC

中的行中

其中

TableA has a field ID_Of_B referencing TableB as foreign key in a M:M relationship
TableC has a field ID_Of_A referencing TableA as foreign key in a M:1 relationship

(因此,TableA中的单个对象A = 1行,并且可以链接到TableBTableC中的多行

我想问的问题是,如果我想使用C#选择与B objects(特定ID)关联的当前C objectsobject ATableA)中,如何使用SqlTransaction来执行此操作,select语句将检索准确的值?

我尝试使用3个不同的select语句(select from A),然后(select from B),然后(select from C),但在这3个select语句中,2个表中的任何一个都可以更改信息并且结果集可能不准确。

TLDR:如何使用c# SqlTransaction来保证选择以1:M和M:M关系以原子和准确的方式提取多个表数据(不允许表B中的其他同时更新/删除语句)和C影响结果集的完整性)

1 个答案:

答案 0 :(得分:0)

您可以设置SqlTransaction.IsolationLevel以保证一致性。 SnapshotSerializable应该可以正常工作,具体取决于您的使用案例。