web-dev-qa-db-fra.com

Comment supprimer un seul enregistrement du tableau à l'aide d'EF 6.1.1

J'utilise Entity Framework 6.1.1.

Je suis deleting single record from table comme suit, mais je ne sais pas si c'est la seule façon ou pourrait le réécrire de manière efficace.

Quelqu'un peut-il partager des commentaires?

Raison: Je demande parce que de nombreuses solutions dans les articles précédents font référence à EF 4.0 et n'utilisent pas la dernière version 6.1.1.

Guid studentId = student.Id;
StudentReportDetail stuDetails = _context.StudentReportDetail.Find(studentId);
if (stuDetails != null)
{
    _context.StudentReportDetail.Remove(stuDetails);
    _context.SaveChanges();
}
15
immirza

Il n'y a aucun changement sur la façon de supprimer une entité entre EF 4 et EF 6. Pour supprimer une entité à l'aide d'Entity Framework, vous devez utiliser la méthode Remove sur DbSet. Remove fonctionne pour les deux entités existantes et nouvellement ajoutées.

  • L'appel de Remove sur une entité qui a été ajoutée mais pas encore enregistrée dans la base de données annulera l'ajout de l'entité. L'entité est supprimée du suivi des modifications et n'est plus suivie par le DbContext.

  • L'appel de Remove sur une entité existante qui fait l'objet d'un suivi des modifications enregistrera l'entité pour la suppression la prochaine fois que SaveChanges sera appelé.

Suppression avec chargement depuis la base de données

Comme l'exemple que vous montrez dans votre question, vous devez d'abord charger l'entité existante de votre contexte pour la supprimer. Si vous ne connaissez pas le Id, vous pouvez exécuter une requête comme je le montre ci-dessous pour le trouver en premier:

    var report= (from d in context.StudentReportDetail
               where d.ReportName == "Report"
               select d).Single();

    context.StudentReportDetail.Remove(report);
    context.SaveChanges();

Suppression sans chargement de la base de données

Si vous devez supprimer une entité, mais qu'elle n'est pas déjà en mémoire, il est un peu inefficace de récupérer cette entité de la base de données juste pour la supprimer. Si vous connaissez la clé de l'entité que vous souhaitez supprimer, vous pouvez attacher un stub qui représente l'entité à supprimer, puis supprimez ce stub. A stub est une instance d'une entité à laquelle seule la valeur de clé est affectée. La valeur clé est tout ce qui est nécessaire pour supprimer des entités.

var toDelete = new StudentReportDetail {Id = 2 };

context.StudentReportDetail.Attach(toDelete);
context.StudentReportDetail.Remove(toDelete);
context.SaveChanges();

Une autre façon pourrait être de changer l'état de l'entité en Deleted.DbContext a des méthodes appelées Entry et Entry<TEntity>, ces méthodes obtiennent un DbEntityEntry pour l'entité donnée et permettent d'accéder aux informations sur l'entité et retournent un objet DbEntityEntry capable d'exécuter l'action sur l'entité. Vous pouvez maintenant effectuer l'opération de suppression sur le contexte en changeant simplement l'état de l'entité en EntityState.Deleted:

var toDelete = new StudentReportDetail {Id = 2 };
context.Entry(toDelete).State = EntityState.Deleted;  
context.SaveChanges();  

Utilisation d'une bibliothèque tierce

Il existe un autre moyen, mais utilise une bibliothèque tierce, EntityFramework Plus , il existe un package de nuggets que vous pouvez installer. Vous pouvez utiliser l'opération de suppression par lots:

context.StudentReportDetail
    .Where(u => u.Id== stuDetails)
    .Delete();
32
octavioccl