/// <summary> /// Führt alle Aktualisierungsaufträge aus der Queue auf dem Entity aus. /// Wenn erfolgreich, dann ist die UpdateJobs Queue leer /// </summary> /// <param name="BoTarget">zu aktualisierendes Entity</param> /// <param name="QueuedJobsForPropertiesUpdate">Warteschlange mit Aktualsierungsaufträgen</param> public static void UpdateBo(Bo.ICoreData <TBo> BoTarget, Queue <Action <TBo> > QueuedJobsForPropertiesUpdate, bool PreserveChangeTrackingItems = false) { if (!PreserveChangeTrackingItems) { while (QueuedJobsForPropertiesUpdate.Any()) { // Der schnöngefinkelte Lambdaausdruck wird ausgeführt, wodurch die Aktualisierung der // Entity- Eigenschaft implementiert wird QueuedJobsForPropertiesUpdate.Dequeue()(BoTarget.GetCore); } } else { UpdateBoAndPreserveChangeTrackingItems(BoTarget, QueuedJobsForPropertiesUpdate); } }
/// <summary> /// Führt alle Aktualisierungsaufträge aus der UpdateJobs- Queue auf dem /// Entity aus und stellt die Aktualisierungaufträge für eine wiederholte /// Ausführung in die Queue wieder ein. /// </summary> /// <param name="BoTarget">zu aktualisierendes Entity</param> /// <param name="QueuedJobsForPropertiesUpdate">Warteschlange mit Aktualisierungsaufträgen</param> static void UpdateBoAndPreserveChangeTrackingItems(Bo.ICoreData <TBo> BoTarget, Queue <Action <TBo> > QueuedJobsForPropertiesUpdate) { int Count = QueuedJobsForPropertiesUpdate.Count; for (int i = 0; i < Count; i++) { // Aktualisierungsauftrag der Warteschlange entnehmen var updJob = QueuedJobsForPropertiesUpdate.Dequeue(); // Der schnöngefinkelte Lambdaausdruck wird ausgeführt, wodurch die Aktualisierung der // Entity- Eigenschaft implementiert wird updJob(BoTarget.GetCore); // Ausgeführten Job wieder in Warteschlange einstellen QueuedJobsForPropertiesUpdate.Enqueue(updJob); } }
/// <summary> /// Alle aktualisierungsaufträge werden auf einem Entity ausgeführt, das z.B. aus einem /// EF- Datenkontext einer Datenbank stammt /// </summary> /// <param name="exTBoTarget">Referenz auf externes Entity</param> public void UpdateExternalBo(Bo.ICoreData <TBo> exTBoTarget, bool PreserveChangeTrackingItems = false) { Debug.Assert(exTBoTarget != this); BoWithChangeTracking <TBo> .UpdateBo(exTBoTarget, QueuedJobsForPropertiesUpdate, PreserveChangeTrackingItems); }