Wydaje mi się, że muszę pobrać obiekt, zanim go usunę za pomocą struktury encji, jak poniżej
var customer = context.Customers.First(c => c.Id == 1);
context.DeleteObject(customer);
context.Savechanges();
Więc muszę dwukrotnie trafić do bazy danych. Czy jest łatwiejszy sposób?
entity-framework
entity
Jeff
źródło
źródło
Odpowiedzi:
W Entity Framework 6 akcja usuwania to
Remove
. Oto przykładźródło
Attach
? Dlaczego nie tylkoRemove
iSaveChanges
?To samo co @Nix z małą zmianą do silnego wpisania:
Jeśli nie chcesz wykonywać zapytań, po prostu utwórz jednostkę, a następnie ją usuń.
źródło
Podobne pytanie tutaj .
W przypadku Entity Framework istnieje EntityFramework-Plus (biblioteka rozszerzeń).
Dostępne w NuGet. Następnie możesz napisać coś takiego:
Jest również przydatny do usuwania zbiorczego.
źródło
Jeśli nie chcesz zapytać o to, po prostu utwórz jednostkę, a następnie ją usuń.
źródło
W jednym z moich projektów używam następującego kodu:
W ten sposób dwukrotnie wysyła zapytanie do bazy danych tylko wtedy, gdy wystąpi wyjątek podczas próby usunięcia elementu o określonym identyfikatorze. Następnie, jeśli element nie zostanie znaleziony, zwraca znaczący komunikat; w przeciwnym razie po prostu odrzuca wyjątek z powrotem (możesz to obsłużyć w sposób bardziej dopasowany do twojego przypadku, używając różnych bloków catch dla różnych typów wyjątków, dodaj więcej niestandardowych sprawdzeń za pomocą bloków if itp.).
[Używam tego kodu w projekcie MVC .Net Core / .Net Core z Entity Framework Core.]
źródło
Przypuszczam, że surowe zapytanie sql jest najszybszym sposobem
źródło
Odpowiedź dwkd działała głównie dla mnie w rdzeniu Entity Framework, z wyjątkiem sytuacji, gdy widziałem ten wyjątek:
Aby uniknąć wyjątku, zaktualizowałem kod:
źródło
Mniejsza wersja (w porównaniu do poprzednich):
źródło
Ta odpowiedź jest faktycznie zaczerpnięta z kursu Scotta Allena zatytułowanego ASP.NET MVC 5 Fundamentals. Pomyślałem, że podzielę się tym, ponieważ uważam, że jest to nieco prostsze i bardziej intuicyjne niż jakakolwiek z odpowiedzi już tutaj. Należy również zauważyć, że według Scotta Allena i innych przeprowadzonych przeze mnie szkoleń metoda znajdowania jest zoptymalizowanym sposobem pobierania zasobu z bazy danych, który może korzystać z buforowania, jeśli został już pobrany. W tym kodzie kolekcja odnosi się do DBSet obiektów. Obiekt może być dowolnym ogólnym typem obiektu.
źródło