Mam tabelę SQL Server w Entity Framework o nazwie employ
z pojedynczą kolumną klucza o nazwie ID
.
Jak usunąć pojedynczy rekord z tabeli za pomocą Entity Framework?
c#
sql-server
entity-framework
użytkownik2497476
źródło
źródło
Odpowiedzi:
Najpierw nie jest konieczne zapytanie obiektu, możesz dołączyć go do kontekstu za pomocą jego identyfikatora. Lubię to:
Alternatywnie możesz ustawić stan dołączonego wpisu na usunięty:
źródło
ctx.Entry(employer).State = EntityState.Deleted
Możesz użyć,
SingleOrDefault
aby uzyskać pojedynczy obiekt spełniający twoje kryteria, a następnie przekazać go doRemove
metody tabeli EF.źródło
źródło
FirstOrDefault
jest niebezpieczny. Albo wiesz, że jest tylko jeden (użyjSingleOrDefault
), albo jest więcej niż jeden i należy to zrobić w pętli.źródło
First
jest niebezpieczny. Albo wiesz, że jest tylko jeden (użyjSingle
), albo jest więcej niż jeden i należy to zrobić w pętli.Korzystam z platformy encji z LINQ. Poniższy kod był dla mnie pomocny;
1- W przypadku wielu rekordów
2- Dla pojedynczego rekordu
źródło
SingleOrDefault
zamiastFirstOrDefault
?Bardziej ogólne podejście
źródło
Z Entity Framework 6 możesz korzystać
Remove
. Jest to również dobra taktyka, abyusing
upewnić się, że połączenie jest zamknięte.źródło
Chciałem tylko wnieść trzy metody, którymi się podskakiwałem.
Metoda 1:
Metoda 2:
Jednym z powodów, dla których wolę stosować Metodę 2, jest to, że w przypadku ustawienia EF lub EFCore na
QueryTrackingBehavior.NoTracking
, bezpieczniej jest to zrobić.Jest też metoda 3:
Wykorzystuje to podejście polegające na łagodnym usuwaniu poprzez ustawienie właściwości rekordu
DeletedOn
i nadal jest w stanie zachować rekord do przyszłego użytku, cokolwiek to może być. Zasadniczo umieszczenie go w Koszu .Ponadto, w odniesieniu do metody 3 , zamiast ustawić cały rekord do modyfikacji:
Po prostu ustawisz tylko kolumnę
DeletedOn
jako zmodyfikowaną:źródło
Co sądzisz o tym, proste czy nie, możesz również spróbować:
źródło
W przypadku ogólnego DAO moja praca ostatecznie to:
źródło
Korzystanie z EntityFramework.Plus może być opcją:
Więcej przykładów jest dostępnych tutaj
źródło
możesz to zrobić po prostu w ten sposób
Model
widok, z którego go nazwiesz
mam nadzieję, że będzie to dla ciebie łatwe do zrozumienia
źródło
Możesz zrobić coś takiego w zdarzeniu kliknięcia lub celldoubleclick swojej siatki (jeśli takiego użyłeś)
Następnie zrób coś takiego w swoim przycisku usuwania:
Alternatywnie można użyć zapytania LINQ zamiast zapytania LINQ To Entities:
seek.Id jest używany jako parametr filtrujący, który został już przekazany ze zdarzenia CellDoubleClick Twojego DataGridView.
źródło
Oto bezpieczny sposób:
Tutaj możesz zebrać wszystkie potrzebne zmiany, dzięki czemu możesz wykonać serię usuwania przed SaveChanges i Commit, więc zostaną one zastosowane tylko wtedy, gdy wszystkie zakończą się powodzeniem.
źródło
Najlepszym sposobem jest sprawdzenie, a następnie usunięcie
źródło