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>())
                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()
    {
        ProxyList osoby = Rivet.Instance
            .Query("select OID from Osoba")
            // .Sort<Osoba>(SortDirection.Desc, a => a.DatNarozeni)
            ;

        using (ContextTran ctx = Rivet.Instance.GetContextTran())
        {

            for (int i = 0; i < osoby.Count; i++)
                osoby[i].Bind(ctx).Delete();

            ctx.Commit();
        }
    }