2013-09-20 2 views
0

Представьте себе, есть программа, написанная в C#, в которой есть object (A), которая ссылается на 2 набора objects (set of B, set of C).MS SQL - чтение нескольких таблиц в C# atomically

Эти объекты хранятся в 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 

(таким образом, один объект А = 1 строка в TableA, и он может быть связан с несколькими строки в TableB и TableC)

вопрос, который я пытаюсь задать, если я хочу использовать C#, чтобы выбрать текущий B objects и C objects, связанный с object A (определенного ID в TableA), как я могу использовать SqlTransaction, чтобы сделать это так, чтобы оператор select получал точные значения?

Я пытался сделать это с 3-х различными операторами выбора (select from A), затем (select from B), затем (select from C), но в течение этих 3-х отдельных утверждений либо из 2-х таблиц могут иметь измененную информацию и набор результатов не может быть точным.

TLDR: как использовать c# SqlTransaction, чтобы гарантировать выбор, который тянет несколько данных таблицы в соотношениях 1: M и M: M атомарным и точным образом (не позволяет другим операциям обновления/удаления в таблицах B и C влиять целостность набора результатов)

ответ

0

Вы можете установить SqlTransaction.IsolationLevel, чтобы гарантировать согласованность. Либо Snapshot, либо Serializable должны работать, в зависимости от вашего варианта использования.

Смежные вопросы