Persistentní třída Osoba
Persistentní třída Osoba dědí od třídy Proxy. Je to základní třída, uchovávající záznam o osobě. Od této třídy odvodíme třídy Muz a Zena.
using System;
using System.IO;
using AVRivet;
namespace Rodokmen
{
public class Osoba : Proxy
{
public Osoba() { }
[MaxLength(20)]
public string Jmeno;
[MaxLength(50)]
public string Prijmeni;
public DateTime? DatNarozeni;
public Stream Portret;
[ForeignKey(typeof(Muz))]
public Proxy Otec;
[ForeignKey(typeof(Zena))]
public Proxy Matka;
public virtual ProxyList GetDeti() { return ProxyList.Create(); }
public ProxyList GetSourozenci()
{
return Matka.LightCast
.GetDeti()
.Union(
Otec.LightCast
.GetDeti()
).Subtract(this);
}
public override string ToString()
{
return string.Format("{0} {1} {2}",
Jmeno,
Prijmeni,
DatNarozeni.HasValue ? DatNarozeni.Value.Year.ToString() : string.Empty
).Trim();
}
}
}
- třída Proxy je předkem všech persistentních tříd a obsahuje primární klíč OID
- vždy je požadován základní konstruktor
- [MaxLength(20)] - zadání pro generátor DB skriptu - šířka sloupce v tabulce
- DateTime? - lze použít nulovatelné typy
- obrázek uložíme jako Stream
- [ForeignKey(typeof(Muz))] - takto se definuje cizí klíč – Otec je typu Muz
- public Proxy Otec - vazba 1xN je vždy typu Proxy
- [ForeignKey(typeof(Zena))] - Matka je typu Zena
- metoda GetDeti() bude přetížena v potomcích
- Matka.LightCast
() - metoda LightCast provádí „lehkou“ konverzi na cílový typ - načítá pouze vazby, nikoli všechny hodnoty - GetDeti() - vrátí seznam dětí
- Union(...) - operace sjednocení seznamů
- Subtract(this) - nejsme sami svým sourozencem :-)
- ToString() - příklad, jak se definuje „zkratka“ objektu