EF -Code zuerst: Modellkonfiguration
-
25-10-2019 - |
Frage
Ich werde versuchen, so klar wie möglich zu sein:
Mein Ziel: Die Modellkonfiguration zu lesen, die ich in meinem überschriebenen erklärt habe OnModelCreating
In meiner Entitätsklasse abgeleitet von DbContext
.
Grund: Einen generische Bau void Update<T>(T toUpdate)
Methode auf meiner Datenschicht, in der ich erhalte, welche Felder der Hauptschlüssel für T sind, rufen Sie sie auf dem übergeben ab toUpdate
Objekt und verwenden Sie sie in der Set<T>().Find
Methode.
Dies würde es mir ermöglichen, für jede Art von Entität, die ich verarbeite, keine Hardcode zu finden.
Ich muss die gespeicherte Entität abrufen, um Updates wie folgt anzuwenden:
var retrievedItem = _entities.Set<T>().Find(myRetrievedKeyValues);
_entities.Entry(retrievedItem).CurrentValues.SetValues(toUpdate);
Ich stecke an dem Punkt fest, an dem in meinem _entities
Instanz (die meine Entitäten Klasse ist, aus der abgeleitet ist DbContext
Natürlich) Ich kann nicht herausfinden, wo die Modellkonfiguration gespeichert ist.
Kann mich jemand in die richtige Richtung verweisen?
Vielen Dank.
Lösung
Sie finden den Code, wie Sie die wichtigsten Eigenschaftennamen eines Entitätstyps abrufen YourEntity
hier:
Entity Framework Code zuerst. Primärschlüssel finden
Und dann die Werte abrufen:
public Update<T>(T toUpdate)
{
// Code from link above with YourEntity = T
List<object> myRetrievedKeyValues = new List<object>();
foreach (var keyName in keyNames)
myRetrievedKeyValues.Add(toUpdate.GetType().GetProperty(keyName)
.GetValue(toUpdate, null));
var retrievedItem = _entities.Set<T>().Find(myRetrievedKeyValues.ToArray());
_entities.Entry(retrievedItem).CurrentValues.SetValues(toUpdate);
}
Erwarten Sie, dass Sie ziemlich langsam haben werden Update
Methode, da Sie Reflexion für diesen generischen Ansatz verwenden müssen.
Vergiss das auch nicht CurrentValues.SetValues
Aktualisiert nur skalare und komplexe Eigenschaften. Es hilft Ihnen nicht, die Navigationseigenschaften zu aktualisieren. Sie müssen nicht generischen Code verwenden, um die Beziehungen zu aktualisieren, die für jeden Entitätstyp spezifisch sind.