Ich habe eine SQL Server-Tabelle in Entity Framework employ
mit einer einzelnen Schlüsselspalte ID
.
Wie lösche ich einen einzelnen Datensatz mit Entity Framework aus der Tabelle?
c#
sql-server
entity-framework
user2497476
quelle
quelle
Antworten:
Es ist nicht erforderlich, das Objekt zuerst abzufragen. Sie können es anhand seiner ID an den Kontext anhängen. So was:
Alternativ können Sie den Status des angehängten Eintrags auf gelöscht setzen:
quelle
ctx.Entry(employer).State = EntityState.Deleted
Sie können
SingleOrDefault
ein einzelnes Objekt verwenden, das Ihren Kriterien entspricht, und dieses dann an dieRemove
Methode Ihrer EF-Tabelle übergeben.quelle
quelle
FirstOrDefault
ist gefährlich. Entweder wissen Sie, dass es nur eine gibt (verwenden Sie alsoSingleOrDefault
), oder es gibt mehr als eine, und dies sollte in einer Schleife erfolgen.quelle
First
ist gefährlich. Entweder wissen Sie, dass es nur eine gibt (verwenden Sie alsoSingle
), oder es gibt mehr als eine, und dies sollte in einer Schleife erfolgen.Ich verwende das Entity Framework mit LINQ. Der folgende Code war hilfreich für mich;
1- Für mehrere Datensätze
2- Für einzelne Aufzeichnung
quelle
SingleOrDefault
anstelle von verwendenFirstOrDefault
?Allgemeiner Ansatz
quelle
Mit Entity Framework 6 können Sie verwenden
Remove
. Es ist auch eine gute Taktik, umusing
sicherzustellen, dass Ihre Verbindung geschlossen ist.quelle
Ich wollte nur die drei Methoden beisteuern, mit denen ich hin und her gesprungen bin.
Methode 1:
Methode 2:
Einer der Gründe, warum ich mich für Methode 2 entscheide, ist
QueryTrackingBehavior.NoTracking
, dass es sicherer ist, EF oder EFCore auf zu setzen.Dann gibt es Methode 3:
Dies verwendet einen Soft-Delete-Ansatz, indem die
DeletedOn
Eigenschaft des Datensatzes festgelegt wird und der Datensatz dennoch für die zukünftige Verwendung aufbewahrt werden kann, was auch immer dies sein mag. Im Grunde genommen in den Papierkorb legen .Auch in Bezug auf Methode 3 , anstatt den gesamten Datensatz so zu ändern, dass er geändert wird:
Sie würden auch einfach nur die Spalte
DeletedOn
als geändert festlegen :quelle
Was denkst du darüber, einfach oder nicht, du könntest es auch versuchen:
quelle
Für generische DAO meine Arbeit finnaly dies:
quelle
Die Verwendung von EntityFramework.Plus kann eine Option sein:
Weitere Beispiele finden Sie hier
quelle
Du kannst es einfach so machen
Modell-
Ansicht, von der aus Sie es nennen werden
Ich hoffe, das wird für dich leicht zu verstehen sein
quelle
Sie können so etwas in Ihrem Klick- oder Celldoubleclick-Ereignis Ihres Rasters tun (falls Sie eines verwendet haben).
Dann machen Sie so etwas in Ihrer Löschtaste:
Alternativ können Sie eine LINQ-Abfrage anstelle der LINQ-Abfrage für Entitäten verwenden:
Employ.Id wird als Filterparameter verwendet, der bereits vom CellDoubleClick-Ereignis Ihrer DataGridView übergeben wurde.
quelle
Hier ist ein sicherer Weg:
Hier können Sie alle gewünschten Änderungen stapeln, sodass Sie vor SaveChanges und Commit eine Reihe von Löschvorgängen durchführen können, damit sie nur angewendet werden, wenn sie alle erfolgreich sind.
quelle
Der beste Weg ist zu überprüfen und dann zu löschen
quelle