Ich verwende Sql-Tabellen ohne Rowversion oder Zeitstempel. Allerdings muss ich Linq verwenden, um bestimmte Werte in der Tabelle zu aktualisieren. Da Linq nicht wissen können, was zu aktualisieren Werte I ein zweites Datacontext bin mit dem aktuellen Objekt aus Datenbank abgerufen werden und sowohl die Datenbank und das eigentliche Objekt als Input für das Verfahren wie so anbringen verwenden:Mit Linq SubmitChanges ohne TimeStamp und StoredProcedures zur gleichen Zeit
Public Sub SaveCustomer(ByVal cust As Customer)
Using dc As New AppDataContext()
If (cust.Id > 0) Then
Dim tempCust As Customer = Nothing
Using dc2 As New AppDataContext()
tempCust = dc2.Customers.Single(Function(c) c.Id = cust.Id)
End Using
dc.Customers.Attach(cust, tempCust)
Else
dc.Customers.InsertOnSubmit(cust)
End If
dc.SubmitChanges()
End Using
End Sub
Während dies tut Ich habe jedoch ein Problem: Ich verwende auch StoredProcedures, um bestimmte Felder des Kunden zu bestimmten Zeiten zu aktualisieren. Nun stellen Sie den folgenden Workflow:
- Get Kunden aus der Datenbank
- ein Kundenfeld auf einen neuen Wert setzen
- Verwenden Sie eine gespeicherte Prozedur
- Anruf SaveCustomer einen anderen Kunden Feld
zu aktualisieren Was jetzt passiert, ist, dass die SaveCustomer-Methode das aktuelle Objekt aus der Datenbank abruft, das den im Code gesetzten Wert nicht enthält, aber den von der gespeicherten Prozedur gesetzten Wert enthält. Wenn Sie dies mit dem tatsächlichen Objekt verbinden und dann abschicken, aktualisiert es den in Code gesetzten Wert ebenfalls in der Datenbank und ... tadaaaa ... setzt den anderen auf NULL, da das tatsächliche Objekt nicht das von der Änderung vorgenommene enthält gespeicherte Prozedur.
War das verständlich?
Gibt es Best Practices zur Lösung dieses Problems?
Das klingt auf jeden Fall vernünftig. Ich arbeite jedoch gegen die Datenbank und die Infrastruktur eines Kunden und er wird keine Zeilenumschaltung einführen, da die meisten Teile seiner Datenbank dynamisch generiert werden und er ein eigenes Framework verwendet, um darauf zuzugreifen. Allerdings nutzte ich die Chance, mit Linq gegen die einzigen Tabellen zu arbeiten, die statisch sind, um zu zeigen, worum es bei Linq geht. ;-) Jetzt habe ich das Problem wegen der SP's. Haben Sie eine gute Quelle, wo ich in diesem Zusammenhang etwas über Parallelitätsprüfungen lernen kann? – Mephisztoe