Laden...

Automatisches Ändern von Werten beim Speichern bzw. vor dem Speichern

Erstellt von Max1809 vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.176 Views
Thema geschlossen
M
Max1809 Themenstarter:in
67 Beiträge seit 2011
vor 5 Jahren
Automatisches Ändern von Werten beim Speichern bzw. vor dem Speichern

verwendetes Datenbanksystem: <EF 5>

Hallo zusammen,

ich möchte in meinem zentralen Repository, welches das EF gegen die Geschäftslogik kapselt, folgendes erreichen: Vor dem Aufruf der tatsächlichen SaveChanges() Methode vom DbContext, würde ich gerne die aufgetretenen Änderungen (Changes) die nun persistiert werden müssen durchlaufen um festzustellen, ob ggf. weitere Änderungen automatisch durch das Repository gemacht werden müssen.

Grund dafür ist, dass in meinem Fall in der Datenbank Werte-Paare vorhanden sind, also Spalten, die im Prinzip den selben Wert speichern nur in einem anderen Format. Nun möchte ich verhindern, dass nur ein Wertepaar angepasst und das andere vergessen wurde.

Dazu habe ich mal folgenden Algorithmus entwickelt:



// --- Ermittlung aller Änderungen die nun persistiert werden sollen ---
var changes = from e in this.Context.ChangeTracker.Entries()
                     where e.State != System.Data.EntityState.Unchanged
                     select e;

foreach (var change in changes)
{
    var item = change.Cast<T>().Entity;

    if (change.State == System.Data.EntityState.Modified)
    {
        var originalValues = this.Context.Entry(item).OriginalValues;
        var currentValues = this.Context.Entry(item).CurrentValues;

        foreach (string changedProperty in currentValues.PropertyNames)
        {
            PropertyInfo propertyInfo = this._properties.Find(pi => pi.Name == changedProperty);

            // Check it is a value-pair-field 
            if (propertyInfo.PropertyType.Name.Contains("SPECIAL_CHAR"))
            {
                // Check if the pair was also edited 
                // First get the name of the pair field ...

                string pairPropertyName = this._FindPropperUsualPropertyToUnicodeProperty(propertyInfo.PropertyType.Name);

                // Check if the field was edited 
                if (currentValues.PropertyNames.First(pi => pi == pairPropertyName) == null)
                {
                    // Not editied -> have to edited it here automatically 
                    originalValues[pairPropertyName] = currentValues[changedProperty]; // I KNOW -> cannot work like this ...
                }
            }
        }
    }
}

// SaveChanges() hier dann aufrufen ...

Mir ist bewusst, dass folgende Zeile nicht funktionieren kann:


originalValues[pairPropertyName] = currentValues[changedProperty]; // I KNOW -> cannot work like this ...

Aber welche Möglichkeit habe ich hier?

M
Max1809 Themenstarter:in
67 Beiträge seit 2011
vor 5 Jahren

Reicht da nicht ein Post?

>

Gut erkannt. Ich wüsste jedoch nicht, dass dies untersagt ist 8o

Ja, tatsächlich habe ich auch dort gefragt und bisher keine Rückmeldung bekommen. Deswegen wollte ich meine Chancen erhöhen und die Frage in einem deutschsprachigen Forum, dass zunächst mit Stackoverflow nichts zutun hat, posten.

2.207 Beiträge seit 2011
vor 5 Jahren

Geschlossen wegen Crosspost. [Hinweis] Wie poste ich richtig?

Thema geschlossen