EF premier code: Modèle de configuration
-
25-10-2019 - |
Question
Je vais essayer d'être aussi clair que possible:
Mon but:. Lire la configuration du modèle que je déclarais dans mon OnModelCreating
surchargée dans ma classe entité dérivée de DbContext
Raison:. Pour construire une méthode de void Update<T>(T toUpdate)
générique sur ma couche de données, où je reçois les champs sont la clé primaire T, les récupérer sur l'objet toUpdate
passé et de les utiliser dans la méthode Set<T>().Find
Cela me permettrait de ne pas trouver la logique dur de code pour chaque type de poignée entité I.
Je dois récupérer pour appliquer les mises à jour, comme l'entité stockée ceci:
var retrievedItem = _entities.Set<T>().Find(myRetrievedKeyValues);
_entities.Entry(retrievedItem).CurrentValues.SetValues(toUpdate);
Je suis coincé au point que, dans mon exemple de _entities
(qui est ma entités classe dérivée de DbContext
bien sûr) je ne peux pas sembler trouver où la configuration du modèle est stocké.
Tout le monde peut me diriger dans la bonne direction?
Merci.
La solution
Vous pouvez trouver le code comment récupérer les noms de propriétés clés d'un type d'entité YourEntity
ici:
Code Entity Framework premier. Trouver la clé primaire
Et puis récupérer les valeurs:
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);
}
Attendez-vous que vous aurez une méthode Update
assez lent parce que vous devez utiliser la réflexion pour cette approche générique.
Aussi, ne pas oublier que CurrentValues.SetValues
ne fera que mettre à jour les propriétés scalaires et complexes. Il ne vous permet pas de mettre à jour les propriétés de navigation. Vous devrez utiliser le code non générique de mettre à jour les relations qui sont spécifiques à chaque type d'entité.