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

本文关键字:读取 方式 SQL MS | 更新日期: 2023-09-27 18:32:13

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

这些对象以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

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

我想问的问题是,如果我想使用 C# 来选择当前B objectsC objects链接到object ATableA 中的特定 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 中的其他同时更新/删除语句影响结果集的完整性)

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

您可以设置 SqlTransaction.IsolationLevel 以保证一致性。 SnapshotSerializable都应该有效,具体取决于您的用例。