web-dev-qa-db-fra.com

Méthode de mise à jour du noyau EF du modèle de référentiel

J'ai une question sur l'utilisation du modèle de référentiel et du modèle d'unité de travail dans une application Web MVC avec Entity Framework Core.

J'implémente actuellement la fonctionnalité de mise à jour dans le contrôleur. Maintenant, à ce stade, je ne sais pas quelle est la meilleure façon de mettre à jour l'entité. J'ai regardé quelques vidéos où ils ont dit qu'une méthode de mise à jour ne devrait pas être présente dans un référentiel comme celui-ci:

public T Update(T entity)
{
  DbSet.Attach(entity);
  var entry = Context.Entry(entity);
  entry.State = System.Data.EntityState.Modified;
}

Cela signifie donc que je devrai le faire comme ceci dans le contrôleur:

public IActionResult Edit(int id, [Bind("NeighbourhoodGroup,Neighbourhood,NeighbourhoodId")] Neighbourhoods neighbourhoods)
{
  var neighbourhoodsFound = unitOfWork.Neighbourhoods.Get(id);
  neighbourhoodsFound.Neighbourhood = neighbourhoods.Neighbourhood;
  neighbourhoodsFound.NeighbourhoodGroup = neighbourhoods.NeighbourhoodGroup;
}

Cependant, cela signifie que je devrai faire cela dans tous les contrôleurs, même si l'objet a beaucoup de propriétés?

J'espère que quelqu'un pourra me donner des conseils sur la meilleure approche.

6
Azzaronn

Dans votre référentiel, vous pouvez avoir la fonctionnalité de mise à jour aussi simple que cela:

public void Update(T entity)
    {
        DbSet.Attach(entity);
        ApplicationContext.Entry(entity).State = EntityState.Modified;
    }

Dans le contrôleur ou à partir de l'endroit où vous préférez faire votre mise à jour, vous pouvez obtenir l'entité de préférence par id, modifier toutes les propriétés que vous souhaitez modifier sur l'entité, appeler la méthode Update à partir du référentiel qui va définir son état sur modifié et enfin appeler la méthode Save ou SaveAsync sur le contexte EF. Votre contexte EF doit être exposé dans votre UnitOfWork.

Pour une explication plus détaillée, vous pouvez voir ce message, il sera très utile. Modèle de référentiel EF

0
DNakevski