Entity Framework 6, kaszkád adatok törlésére

Az alapértelmezett kód-First közé lépcsőzetes törli az idegen kulcsokat, amelyek nem támogatják a NULL értéket, a megfelelő SQL-kódot a tábla létrehozásához. Egy korábbi cikkben leírjuk, hogy hogyan lehet megadni Code-First, hogy egy idegen kulcs mindig használni kell (azaz fenntartják a korlátozásokat NOT NULL). Emlékezzünk arra, hogy hogyan kell csinálni:







Akkor egyértelműen meg kell határozni az idegen kulcs tulajdonság, akkor a kód-First az alapértelmezett értéke NOT NULL az adatbázisban érte. A példákban általunk használt idegen kulcsok ügyfélId és UserId.

Ha egy külső kapcsoló nincs megadva a modell osztály, akkor a kód-First automatikusan generálja azt, lehetővé téve a használatát NULL. Ahhoz, hogy ez megváltozzon, akkor a szükséges attribútum a navigációs tulajdonságokat a modell.

Nézzünk egy példát a lépcsőzetes törlés példáját mi ASP.NET teszt projektet. Ehhez egy új webes űrlap CascadeDelete.aspx és adjuk hozzá a következő kódot:

Ebben a formában a két gomb eltávolítására használt és tárolja az adatokat. A kód felvezető Save_Click előfordul létre tetszőleges objektumra Ügyfél három kapcsolódó tárgyak sorrendben, majd ezek kerülnek be a bázis. A kód Delete_Click felvezető először bontsa ki a kívánt adatokat az ügyfél adatbázist, majd törölje azt. Megjegyezzük, hogy az általa használt „mohó loading” (mohó betöltéssel). mert hívjuk include () metódust. Ez azt jelenti, hogy amellett, hogy az ügyfél adatait, kapcsolódó összes adat megrendeléseket kell távolítani. Tény, hogy a lépcsőzetes törli ebben az esetben nem szükséges, mert a már eltávolította az összes kapcsolódó megrendeléseket.

Az adatmodell a pillanatban a következő:

Entity Framework 6, kaszkád adatok törlésére






Kattintson a „Törlés” gombra, hogy megbizonyosodjon arról, hogy az adatok a vevő és a kapcsolódó megbízások törlésre kerülnek-e. Ebben az esetben, Entity Framework küld négy törlési lekérdezés adatbázis (háromnál érdekében, egyet pedig a vevő). Térjünk ki a használat mohó betöltéssel és természetesen használja a lépcsőzetes törli. A következő kód mutatja a módosított Delete_Click felvezető:

Itt eltávolítottuk a kihívást include () metódus, és most Code-First nincs tisztában a kapcsolódó megrendeléseket a vevő. Ellentétben az előző példában, itt Entity Framework küld egy törlési kérés törölni az ügyfél. Amikor futtatja ezt a lekérdezést munka azt jelenti, lépcsőzetes törlés és az SQL Server kapcsolódó megrendelések először távolítsa el őket, majd később eltávolítani a vevő.

Letiltása lépcsőzetes adatok törlése

Fontos megjegyezni, hogy ha letiltja a lépcsőzetes törlés az alkalmazás hibák léphetnek fel, ha nem gondoskodunk a kitermelése kapcsolódó adatok törlés előtt, mint mi az első példában a „mohó betöltéssel.”

Letiltása vagy engedélyezése a lépcsőzetes törlés Fluent API lehetővé teszi WillCascadeOnDelete () metódust. mely logikai paraméter továbbított. Ezt a módszert használva látható az alábbi példában:

Ha az alkalmazás futtatásához, és próbálja meg törölni az adatokat egy másik példája a felvezető Delete_Click, kivételt dobtunk, amint azt az alábbi ábra mutatja:

Entity Framework 6, kaszkád adatok törlésére

Ahogy korábban leírtuk, ha az adatok törlődnek a szülő táblát, meg kell vigyázni az adatok törléséről a származtatott asztalra. Elfelejtettük kivonat kapcsolatos adatokat megrendeléseket a rendelések táblára így az SQL Server hibával tér vissza, amikor megpróbál törölni az adatokat csak a vevőnek. Ha most kapcsolja be a „mohó betöltéssel” include () metódus a felvezető Delete_Click, ez a hiba eltűnik, de egy új - a fent leírtak szerint, ebben az esetben a kódex-First küldeni négy kérelmek törlés és eltávolítása az elsőrendű Code-First érték megállapítása az ingatlan Order.Customer NULL, és mivel A modell tartalmaz egy idegen kulcs, amely nem lehet NULL sikertelen.

Ahogy lépcsőzetes törlés leállítása szükséges táblák, amelyek meghatározzák egyes kapcsolatok egymás között. Egyes adatbázisok (beleértve az SQL Server) nem támogatja a többszörös kapcsolatokat, amelyek meghatározzák a lépcsőzetes törölni kell jelölni egy asztal.




Kapcsolódó cikkek