public class TestBL
{
public static void AddFolder(string folderName)
{
using (var ts = new TransactionScope())
{
using (var dc = new TestDataContext())
{
var folder = new Folder { FolderName = folderName };
dc.Folders.InsertOnSubmit(folder);
dc.SubmitChanges();
AddFile("test1.xyz", folder.Id);
AddFile("test2.xyz", folder.Id);
AddFile("test3.xyz", folder.Id);
dc.SubmitChanges();
}
ts.Complete();
}
}
public static void AddFile(string filename, int folderId)
{
using (var dc = new TestDataContext())
{
dc.Files.InsertOnSubmit(
new File { Filename = filename, FolderId = folderId });
dc.SubmitChanges();
}
}
}
To jest przykład zagnieżdżonego DataContext (untested). Problem zaczyna się po dodaniu TransactionScope do naszego małego eksperymentu (jak pokazano powyżej). Pierwszy AddFile w funkcji AddFolder eskaluje transakcję do DTC (który jest źle na wszelkie sposoby), ponieważ AddFile inicjuje nowy DataContext, otwierając w ten sposób drugie połączenie z DB.Jak obsłużyć zagnieżdżony datacontext w BL?
- Jak mogę użyć zagnieżdżonego DataContext, który nie spowoduje użycia DTC?
- Czy to wszystko jest po prostu błędne? Czy powinienem używać inaczej DataContext?
Niestety, czułem, że to pytanie nie przyciągnęło uwagi, na które zasłużyło i nie otrzymałem w pełni odpowiedzi :( –