Spravnost riesenia (EF)   otázka

ASP.NET WebForms, Databáze

Ahojte,

skusam trochu samostudia ohladom EF. Skusam si robit maly "edu" projekt ktory vytiahne nejake knihy z DB. Vytvoril som entitnu triedu Book ktora ma niektore polia ktore sa odkazuju do inych entitnych tried ako Autor, alebo Zaner. Pri pisani metody na vratenie kolekcie Book som narazil na niekolko problemov a vsetky som nakoniec odstranil tak, ze som vytvoril dalsiu triedu Kniha.

Kod teraz funguje, ale napriek tomu ma zaujima, ci je take riesenie v poriadku, alebo ci to mam riesit tak aby som dalsiu triedu vytvarat nemusel a vracal len tu entitnu. Kod na vratenie vyzera cca takto.

Table<Book> table = db.GetTable<Book>();

IEnumerable<Kniha> books = table.Select(x => new Kniha{Nazov = x.Nazov, Meno = x.Autor.Meno, Priezvisko=x.Autor.Priezvisko});

Vdaka za radu

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Až na to, že polovina tříd se jmenuje česky a polovina anglicky a není patrné, jaký je rozdíl mezi Kniha a Book, tak je to řešení v pohodě.

Já bych akorát třídu Kniha pojmenoval třeba BookInfo (osobně jsem zvyklý dávat příponu Info právě těmto třídám, které třeba sdružují data z více databázových tabulek).

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dakujem za odpoved.

Ano, chapem, ze to nie je spravna konvencia, ale ja som nad tym prilis nepremyslal. Je to projekt s ktorym som rano zacal a vecer ho zmazem. Povodne slo vlastne o to, ze vytvorim entitne triedy ktore sa budu mapovat na polia v DB(trieda Book) ktoru som povodne chcel aj vracat metodou napr IEnumerable<Book> GetAllBooks().

Boli tam ale iste problemy pri referenciach, ktore som sa snazil riesit, no vznikali vzdy nove a tak som to vyriesil triedou Kniha, ktora vyzera nejak takto:

public class Kniha

{

public int IdKniha { get; set; }

public string Nazov { get; set; }

public string Zaner{get; set;}

public string Meno{get;set;}

public string Priezvisko { get; set; }

public DateTime RokVydania { get; set; }

}

je to vlastne len struktura ktora zabaluje objekt knihy.

Trieda Book je entitna a vyzera cca takto:

[Table(Name="Kniha")]

public class Book

{

[Column(Name = "IdKniha", IsPrimaryKey = true, CanBeNull = false)]

public int IdKniha { get; set; }

[Column(Name = "Nazov", CanBeNull = false)]

public string Nazov { get; set; }

[Column(Name = "RokVydania", CanBeNull = false)]

public DateTime RokVydania { get; set; }

[Column(Name = "IdZaner", CanBeNull = false)]

public int IdZaner { get; set; }

[Column(Name = "IdAutor", CanBeNull = false)]

public int IdAutor { get; set; }

[Association(Storage = "zaner", ThisKey = "IdZaner", OtherKey = "IdZaner")]

public Zaner Zaner

{

get { return this.zaner.Entity; }

set { this.zaner.Entity = value; }

}

[Association(Storage = "autor", ThisKey = "IdAutor", OtherKey = "IdAutor")]

public Autor Autor

{

get { return this.autor.Entity; }

set { this.autor.Entity = value; }

}

#region entity references

private EntityRef<Zaner> zaner;

private EntityRef<Autor> autor;

#endregion

}

Su tam potom dalsie dve entitne triedy ku ktorym sa odkazuju polia z tried Book.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback