Mam kawałek kodu, który wygląda mniej więcej tak (ClearImportTable i InsertPage są procedury przechowywane):Jak używać transakcji w LINQ do SQL przy użyciu procedur przechowywanych?
datacontext.ClearImportTable() //Essentially a DELETE FROM table
for (int i = 1; i < MAX_PAGES; ++i){
datacontext.InsertPage(i); //Inserts data into the table
}
Jest to nieco uproszczona wersja mojego kodu, ale chodzi o to, że czyści stół przed włożeniem dokumentacja. Jedynym problemem jest to, że jeśli wystąpi błąd po ClearImportTable, wszystkie dane z tabeli zostaną wyczyszczone. Czy istnieje sposób na zawarcie tego w transakcji, tak aby w przypadku jakichkolwiek błędów wszystko zostanie przywrócone tak, jak było?
Wymaga to użycia MSDTC, co nie zawsze jest dobrym pomysłem. –
Wierzę, że MSDTC jest potrzebny tylko wtedy, gdy utworzysz więcej niż jeden wiersz danych w ramach usługi transqation i uruchomisz kwerendy przeciwko nim. Jeśli utworzysz tylko jeden obiekt datacontext w zakresie transakcji, nie będzie to wymagane. –
MSDTC jest wymagany tylko w przypadku wielu menedżerów zasobów. Tak długo, jak obejmuje tylko jeden DataContext i połączyć się z jednym wystąpienie SQL Server, należy użyć transakcji lekkich. – jrista