2017-07-27 31 views
0

Ich arbeite an einem .Net-Projekt mit Dapper als ORM. EF ist nicht wirklich eine Option, da die DB/das Schema zur Laufzeit etwas flexibel sein muss.Dapper.Contrib - Wie erhält man Änderungsverfolgungswerte?

Mit Hilfe von Dapper.Contrib können wir die Funktion "Change Tracking" verwenden, um zu optimieren, was in die Datenbank geschrieben wird. Was wir wirklich möchten, ist in der Lage zu sein, auf diese Informationen zuzugreifen (was sich geändert hat) und es in ein 'Änderungsprotokoll' zu schreiben.

Es scheint nicht viel Dokumentation in Dapper.Contrib darüber zu sein. Hat jemand irgendwelche Vorschläge, wie das gemacht werden könnte? Vielen Dank.

Antwort

0

Ok, es sieht aus wie das Dapper.Contrib 'Change Tracking' ist nur ein Effizienz-Helfer (es schreibt nur SQL für tatsächliche Änderungen). Ich habe Reflektion verwendet, um die Modellstruktur während des Startvorgangs vorzuladen, und habe diese dann verwendet, um nach Änderungen zwischen meinen beiden Modellversionen zu suchen.

Wenn es jemand hilft, der Code etwa wie folgt aussieht (beachten Sie testProps wird die reflektierte Liste der Klasseneigenschaften, ist DifferenceCompare ein einfaches Modell für die Verfolgung von Änderungen):

List<DifferenceCompare> differences = new List<DifferenceCompare>(); 
     foreach (PropertyInfo property in testProps) 
     { 
      object value1 = property.GetValue(one, null); 
      object value2 = property.GetValue(two, null); 
      if (value1 != null && value2 != null) 
      { 
       if (!value1.Equals(value2)) 
       { 
        differences.Add(new DifferenceCompare(
         property.Name.ToString(), 
         value1.ToString(), 
         value2.ToString())); 
       } 
      } 
      else if (value1 == null && value2 != null) 
      { 
       differences.Add(new DifferenceCompare(
        property.Name.ToString(), "", value2.ToString())); 
      } 
     } 

Credit Oskar Kjellin für den Start Punkt davon.

Verwandte Themen