MS SQL - 以原子方式读取 C# 中的多个表
本文关键字:读取 方式 SQL MS | 更新日期: 2023-09-27 18:32:13
想象一下,有一个用C#
编写的程序,其中有一个引用2组objects ( set of B, set of C)
的object (A)
。
这些对象以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
(因此,单个对象 A = TableA
中的 1 行,并且可以链接到 TableB
和 TableC
中的多行)
我想问的问题是,如果我想使用 C#
来选择当前B objects
并C objects
链接到object A
(TableA
中的特定 ID),我如何使用SqlTransaction
来做到这一点,以便 select 语句将检索准确的值?
我尝试使用 3 个不同的 select 语句来做到这一点 (select from A)
,然后是 (select from B)
,然后是 (select from C)
,但在这 3 个 select 语句中,这两个表中的任何一个都可能更改了信息,结果集可能不准确。
TLDR:如何使用c# SqlTransaction
来保证以原子和准确的方式拉取 1:M 和 M:M 关系中的多个表数据的选择(不会让表 B 和 C 中的其他同时更新/删除语句影响结果集的完整性)
您可以设置 SqlTransaction.IsolationLevel 以保证一致性。 Snapshot
或Serializable
都应该有效,具体取决于您的用例。