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.

Était-ce utile?

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é.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top