Entity Framework 4.1: Wie wird mit dem Kontext der Lebenszeitdaten pro Anruf gearbeitet?

DemzufolgePostWenn ich einen Datenkontext pro Aufruf verwende, verwende ich für jede Methode meines WCF-Dienstes einemit Block um einen neuen Datenkontext zu erstellen.

Aber ich habe einige Zweifel an der Form, auf diese Weise zu arbeiten.

Beispielsweise verwende ich eine Methode getAllCLients () aus meinem Repository, um alle Clients der Datenbank abzurufen, und sende dann den Dienst an den Client, der die Methode aufruft, eine Liste mit allen Clients. Dann modifiziert der Benutzer die Informationen einiger von ihnen, beispielsweise drei. Den Änderungs-Client kann ich vielleicht zu einer Liste hinzufügen, die die geänderten Clients enthält.

Wenn ich diese drei Clients aktualisieren möchte, kann ich eine Methode updateClients () aufrufen, die eine Liste der geänderten Clients erhält. Wie ich für jede Methode einen neuen Datenkontext verwende, erhält updateCients () einen neuen Datenkontext ohne Entitäten, sodass ich denke, dass ich die folgenden Schritte ausführen muss:

1.- Erstellen Sie einen neuen Datenkontext mit den Clients, die ich aktualisieren möchte. Also muss ich die Bedingungen dafür spezifizieren. Dies ist eine zusätzliche Operation (ich erhalte die Clients zuvor mit der Methode getAllClients ()), daher muss ich die Clients erneut abrufen.

2.- werfen Sie die clients-Sammlung des DBSets (ich verwende EF 4.1) und ändern Sie die Informationen. Dies veranlasst mich, die Liste zu werfen, die ich auch von der Client-Anwendung erhalte. Also muss ich zwei Listen werfen. Das braucht Ressourcen.

3.- Speichern Sie die Änderungen. Dies wird sowieso benötigt, so dass keine weitere Arbeit erforderlich ist.

Gibt es eine Möglichkeit, den Schritt 2 einfach zu machen? Gibt es eine Methode in dataContext, um die Werte von meinem geänderten Client an den Client im Datenkontext zu übergeben? Ich verwende POCO-Entities, vielleicht gibt es dafür einen einfachen Weg.

Die andere Frage betrifft die Nebenläufigkeit. Wenn ich die Parallelität mit pesimistischer Parallelität steuere, die EF ermöglicht (z. B. mit einem Zeitstempelfeld), ist es besser, den updateClient () für jeden Client aufzurufen oder eine Liste mit allen Clients zu übergeben? Ich meine, wenn ich eine Liste als Parameter verwende, wenn es ein Problem mit der Parallelität bei einem Client gibt, wird der zweite zum Beispiel korrekt aktualisiert, der zweite nicht und der dritte auch nicht. Wie kann ich dem Benutzer mitteilen, dass bei einigen Clients Probleme vorliegen?

Um fortzufahren, möchte ich wissen, wie ich Updates am besten machen kann, wenn ich einen Datenkontext mit kurzer Lebensdauer habe.

Vielen Dank. Daimroc.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage