Mazání záznamů
Následující metoda Smazat vymaže všechny osoby z databáze.
Metodu doplníme do konzolové aplikace a jejím voláním nahradíme volání metody Naplnit.
Příklad demonstruje:
- zkusme nejprve nechat zakomentované sestupné třídění (Sort). Metoda pravděpodobně nahlásí chybu a akce se celá „odroluje“. Databáze obsahuje tzv. „cizí klíče“, které hlídají její referenční integritu. Zde to znamená, že nelze smazat osobu, která je odkazovaná z jiné osoby jako její rodič. Pokud platí, že dítě je mladší než jeho rodiče, sestupné třídění podle data narození tento problém řeší – nejprve se smažou děti a teprve potom jejich rodiče. Odstraňme komentář před „Sort“ a ověřme to. Osoby by tentokrát měly z databáze zmizet.
- tímto také demonstrujeme funkci transakce – buď se provede v pořádku všechno nebo nic. Používání transakce je vhodné vždy, když nějak měníme vztahy uvnitř systému.
- na tomto příkladu je také vidět typickou vlastnost objektu třídy ProxyList – pokud chceme procházet objekty Proxy, které v sobě nese, musíme použít buď generickou metodu „Cast“:
foreach (Proxy proxy in osoby.Cast
proxy.Bind(ctx).Delete();
- nebo další (a efektivnější) možnost - použití indexeru:
for (int i = 0; i < osoby.Count; i++)
osoby[i].Bind(ctx).Delete();
private static void Smazat() for (int i = 0; i < osoby.Count; i++)
{
ProxyList osoby = Rivet.Instance
.Query("select OID from Osoba")
// .Sort
;
using (ContextTran ctx = Rivet.Instance.GetContextTran())
{
osoby[i].Bind(ctx).Delete();
}
}