Ist die Dokumentation Zitat aus dieser Antwort: https://stackoverflow.com/a/542691/1011724Does LINQ2SQL setzen ExecuteCommand automatisch in einer Transaktion
Wenn Sie SubmitChanges rufen, LINQ to SQL überprüft, ob der Anruf im Rahmen einer Transaktion ist oder wenn die Die Transaktionseigenschaft (IDbTransaction) ist auf eine vom Benutzer gestartete lokale Transaktion festgelegt. Wenn keine Transaktion gefunden wird, startet LINQ to SQL eine lokale Transaktion (IDbTransaction) und verwendet sie, um die generierten SQL-Befehle auszuführen. Wenn alle SQL-Befehle erfolgreich abgeschlossen wurden, schreibt LINQ to SQL die lokale Transaktion fest und gibt sie zurück.
gelten für die .ExecuteCommand()
Methode? Mit anderen Worten, kann ich darauf vertrauen, dass das folgende Löschen in einer Transaktion behandelt wird und automatisch rückgängig gemacht wird, wenn es fehlschlägt oder muss ich es manuell mitteilen, eine Transaktion zu verwenden, und wenn ja, wie? Sollte ich TransactionScope
verwenden?
using(var context = Domain.Instance.GetContext())
{
context.ExecuteCommand("DELETE FROM MyTable WHERE MyDateField = {0}", myDate)
}
Die using-Anweisung erstellt einen Ausnahmebehandler für das Programm nicht beendet und nach dem using-Block fortgesetzt. Es garantiert nicht, dass der gesamte Code in der using-Anweisung ausgeführt wird. Der GetContext kann zwei verschiedene Arten von Fehlern haben. 1) Verbindung zur Datenbank nicht möglich 2) Fehler beim Abrufen von Daten aus der Datenbank. Jetzt macht es Sinn, einen Löschvorgang durchzuführen, wenn Sie keine Verbindung zur Datenbank herstellen können. Nein. Ist es sinnvoll, aus einer Tabelle zu löschen, die keine Zeilen enthält, weil während der Abfrage eine Ausnahme aufgetreten ist, nein Sicher ist es notwendig, das Löschen in jedem Fall durchzuführen. – jdweng
Meine Frage ist mehr von der DB-Seite - wird es transaktional sein? Entweder muss das gesamte Löschen erfolgen oder nichts muss gelöscht werden. Wenn also mitten in der Löschung ein Fehler auftritt, muss ich wissen, dass die DB in einen Zustand zurückgesetzt wird, bevor die Löschung gestartet wurde. Das frage ich. – Dan
Es ist besser, als gespeicherte Prozedur in der Datenbank zu implementieren. Wenn Sie eine Abfrage hatten, die eine halbe Stunde dauerte und die Verbindung zwischen dem Client und dem Server unterbrochen wurde, trat das Löschen in der Mitte der Abfrage nicht auf. Es kann besser sein, Code als gespeicherte Prozedur in der Datenbank zu verwenden als in C#. Ich kenne nicht alle Voraussetzungen, um eine bessere Antwort zu geben. – jdweng