LINQ to SQL Wie kann ich Änderungen nach dem Schließen der Verbindung übermitteln?
-
12-12-2019 - |
Frage
Ich greife mit LINQ auf eine Datenbank zu und nehme Änderungen an den Datensätzen vor.Ich rufe die Datensätze folgendermaßen ab:
using(var db = new DatabaseDataContext(connectionString))
{
var query =
from item in db.table
where item.senddate == null
select item;
results = query.ToList();
}
Nachdem ich die Elemente erhalten habe, verarbeite ich jedes einzelne, was die Kommunikation mit einem Webdienst erfordert und mehr als eine Minute pro Datensatz dauern kann.Wenn der Datensatz aktualisiert wurde, muss ich die Änderungen übermitteln, bin mir aber nicht sicher, wie ich vorgehen soll.Derzeit mache ich Folgendes:
List<table> toProcess = QueryDb(); // Calls the previously displayed method
foreach (table item in toProcess)
{
item.result = QueryDb(item.xmlrequest);
PostToDb(item);
}
...
private bool PostToDb(table submit)
{
submit.senddate = DateTime.Now;
using (var db = new DatabaseDbDataContext(connectionString))
{
db.SubmitChanges();
}
return result;
}
db.SubmitChanges()
übermittelt keine Änderungen, aber ich habe nicht wirklich festgelegt, dass das Objekt „submit“ die Änderungen enthält.Wie übermittle ich die am Eintrag vorgenommenen Änderungen, ohne die Datenbankverbindung mehrere Minuten lang offen zu halten, während die Dateien einzeln verarbeitet werden?
Vielen Dank im Voraus für jede Hilfe.
TEILWEISE GELÖST
Ich glaube nicht, dass dies die beste Lösung ist, aber ich konnte sie mit den folgenden Änderungen an meinem Code zum Laufen bringen:
private bool PostToDb(table submit)
{
using (var db = new DatabaseDataContext(connectionString))
{
var query =
from item in db.table
where item.iprimaryid.Equals(submit.iprimaryid)
select item;
// There can only be one result, but this was the only
// way I could think to access it
foreach (var item in query)
{
item.senddate = DateTime.Now;
item.result = submit.result;
}
db.SubmitChanges();
}
return result;
}
Lösung
Sie müssen das verwenden Attach
Methode für Ihre DataContext
.Ihre Schritte sind also:
1) Fragen Sie ein Objekt aus der Datenbank mithilfe einer Instanz Ihres ab DataContext
2) Nehmen Sie einige Änderungen vor
3) Erstellen Sie das Neue DataContext
Instanz erstellen und geänderte Entitäten anhängen.
using (var dataContext = new DataContext(ConnectionString))
{
dataContext.TABLE_NAME.Attach(modifiedEntity);
dataContext.SubmitChanges();
}
Andere Tipps
Können Sie Ihren Datenkontext in einem äußeren Geltungsbereich deklarieren und als Parameter an die Methoden weitergeben, die auf die Datenbank zugreifen müssen?So etwas wie folgt:
generasacodicetagpre.