Pour faire suite à mon précédent article sur l’update avec Entity Framework, voici une autre une idée qui a la peau dure : “pour supprimer des données avec EF, il faudrait systématiquement aller chercher en base l’entité avec toutes ses propriétés”.

Même si cela à longtemps été le cas, ceci est faux aujourd’hui. Avec EF, on peut effectuer une suppression en un seul DELETE.

Ceci peut se faire en quelques étapes clés :

1. Instancier un objet avec les valeurs voulues. Seul impératif: utiliser la clé primaire de l’enregistrement à supprimer (logique).

// Instanciation de l'entité à supprimer
Customer entity = new Customer
{
    Id = 10// ma clé primaire
};

 

2. Attacher l’entité au contexte de donnée.

// Attacher l'entité au context
_datacontext.Customers.Attach(entity);

 

3. Expliciter le fait que l’entité doit être supprimée.

// Recupération de l'entry et la marquer pour suppression
var entry = _datacontext.Entry(entity);
entry.State = System.Data.Entity.EntityState.Deleted;

 

5. Lancer l’enregistrement des modification, donc l’exeution du DELETE.

// Enregister les modifications
Boolean result = _datacontext.SaveChanges() > 0;

 

Et pour ceux qui voudraient avoir une idée de ce que cela peut donner dans une méthode complette :

public Boolean DeletCustomer(Int32 id)
{
    // Instanciation de l'entité à supprimer
    Customer entity = new Customer
    {
        Id = id,
    };

    // Attacher l'entité au context
    _datacontext.Customers.Attach(entity);

    // Recupération de l'entry et la marquer pour suppression
    var entry = _datacontext.Entry(entity);
    entry.State = System.Data.Entity.EntityState.Deleted;

    // Enregistrement
    return _datacontext.SaveChanges() > 0;
}