想象一下,有一个用C#
编写的程序,其中有object (A)
引用了2组objects ( set of B, set of C)
。
这些对象存储在MS SQL
TableA
,TableB
,TableC
其中
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行,并且可以链接到TableB
和TableC
中的多行
我想问的问题是,如果我想使用C#
选择与B objects
(特定ID)关联的当前C objects
和object A
在TableA
)中,如何使用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影响结果集的完整性)
答案 0 :(得分:0)
您可以设置SqlTransaction.IsolationLevel以保证一致性。 Snapshot
或Serializable
应该可以正常工作,具体取决于您的使用案例。