Иногда сталкиваешься с ситуацией, когда необходимо выполнить в одной транзакции несколько действий с объектной моделью SharePoint.
К сожалению официального решения для этой проблемы не существует, но зато существует один обходной путь, который не решает всех проблем, но в некоторых ситуациях помогает.

Итак...если бы весь код SharePoint был managet, то можно было бы использовать TransactionScope, но т.к. по историческим причинам в SharePoint-е всех версий живет какое-то количество unmanaget кода, то выход можно усмотреть в облегченных COM+ транзакциях.

ServiceConfig Sc = new ServiceConfig();
Sc.Transaction = TransactionOptions.RequiresNew;
Sc.IsolationLevel = TransactionIsolationLevel.ReadCommited;
///set some other Sc properties

ServiceDomain.Enter(Sc);

Try{
                SPSite site = new SPSite("…..");  Важно!!! Не брать из текущего контекста
                ///do something with SharePoint OM
                ContextUtil.EnableCommit();
}catch{
                …
                ContextUtil.SetAbort();
}

ServiceDomain.Leave();

Проблема, которая может всплыть при таком решении достаточно очевидна. Это deadlock.