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;
}
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top