J'ai une table SQL Server dans Entity Framework nommée employ
avec une seule colonne de clé nommée ID
.
Comment supprimer un seul enregistrement de la table à l'aide d'Entity Framework?
c#
sql-server
entity-framework
user2497476
la source
la source
Réponses:
Il n'est pas nécessaire d'interroger d'abord l'objet, vous pouvez le joindre au contexte par son identifiant. Comme ça:
Vous pouvez également définir l'état de l'entrée jointe sur supprimé:
la source
ctx.Entry(employer).State = EntityState.Deleted
Vous pouvez utiliser
SingleOrDefault
pour obtenir un seul objet correspondant à vos critères, puis le transmettre à laRemove
méthode de votre table EF.la source
la source
FirstOrDefault
est dangereux. Soit vous savez qu'il n'y en a qu'un (alors utilisezSingleOrDefault
), soit il y en a plus d'un, et cela devrait être fait en boucle.la source
First
est dangereux. Soit vous savez qu'il n'y en a qu'un (alors utilisezSingle
), soit il y en a plus d'un, et cela devrait être fait en boucle.J'utilise le framework d'entité avec LINQ. Le code suivant m'a été utile;
1- Pour plusieurs enregistrements
2- Pour un enregistrement unique
la source
SingleOrDefault
place deFirstOrDefault
?Approche plus générique
la source
Avec Entity Framework 6, vous pouvez utiliser
Remove
. C'est aussi une bonne tactique à utiliserusing
pour être sûr que votre connexion est fermée.la source
Je voulais juste contribuer aux trois méthodes avec lesquelles j'ai rebondi.
Méthode 1:
Méthode 2:
L'une des raisons pour lesquelles je préfère utiliser la méthode 2 est que dans le cas de la définition de EF ou EFCore
QueryTrackingBehavior.NoTracking
, il est plus sûr de le faire.Ensuite, il y a la méthode 3:
Cela utilise une approche de suppression logicielle en définissant la
DeletedOn
propriété de l'enregistrement et en étant toujours en mesure de conserver l'enregistrement pour une utilisation future, quelle qu'elle soit. Fondamentalement, le mettre dans la corbeille .En outre, en ce qui concerne la méthode 3 , au lieu de définir l'enregistrement entier à modifier:
Vous devez également simplement définir uniquement la colonne
DeletedOn
telle que modifiée:la source
Que pensez-vous de cela, simple ou non, vous pouvez également essayer ceci:
la source
Pour le DAO générique mon travail enfin ceci:
la source
Utiliser EntityFramework.Plus pourrait être une option:
Plus d'exemples sont disponibles ici
la source
tu peux le faire comme ça
modèle
vue d'où tu l'appelleras
j'espère que ce sera facile à comprendre
la source
Vous pouvez faire quelque chose comme ça dans votre événement click ou celldoubleclick de votre grille (si vous en avez utilisé un)
Ensuite, faites quelque chose comme ceci dans votre bouton Supprimer:
Vous pouvez également utiliser une requête LINQ au lieu d'utiliser la requête LINQ To Entities:
employ.Id est utilisé comme paramètre de filtrage qui a déjà été transmis à partir de l'événement CellDoubleClick de votre DataGridView.
la source
Voici un moyen sûr:
Ici, vous pouvez empiler toutes les modifications souhaitées, vous pouvez donc effectuer une série de suppressions avant les modifications et les validations, de sorte qu'elles ne seront appliquées que si elles réussissent toutes.
la source
La meilleure façon est de vérifier puis de supprimer
la source