MVC výpis dat z více tabulek – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

MVC výpis dat z více tabulek – .NET – Fórum – Programujte.comMVC výpis dat z více tabulek – .NET – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
hajnis0
Newbie
15. 5. 2013   #1
-
0
-

Dobrý den,

Chtěl bych se zeptat, jak sepsat controller a view, když mám následující modely:
 

public class Kniha
    {
        public int KnihaID { get; set; }
	...
        public int AutorID { get; set; }
        public virtual Autor Autor { get; set; }
        public virtual ICollection<Zanr> KnihaZanry { get; set; }
        public virtual ICollection<Cenik> KnihaCeniky { get; set; }
    }
public class Autor
    {
        public int AutorID { get; set; }
      	...
        public virtual ICollection<Kniha> NapsaneKnihy { get; set; }
    }
public class Cenik
    {
        public int CenikID { get; set; }
	...
        public Kniha Kniha { get; set; }
        public virtual Zamestnanec Zamestnanec { get; set; }
        public int ZamestnanecID { get; set; }
        public int KnihaID { get; set; }
    }
public class Zanr
    {
        public int ZanrID { get; set; }
	...
        public virtual ICollection<Kniha> ZanrKnihy { get; set; }
    }
public class AutorKnihaDalsi
    {
            public IEnumerable<Autor> Autori { get; set; }
            public IEnumerable<Kniha> Knihy { get; set; }
            public IEnumerable<Zanr> Zanry { get; set; }
            public IEnumerable<Cenik> Ceniky { get; set; }

    }

Controller jsem začal, ale nevím jak spojit záznamy( to umím pouze přes SQL):

public ActionResult Index()
        {
            var viewInfo = new AutorKnihaDalsi();
            viewInfo.Knihy = db.Knihy.Include(c => c.Autor).Include(i=> i.KnihaCeniky.Select(c=> c.AktualniCena));
            return View(viewInfo);
        }

Cílem by mělo být to, že view mi vypíše do tabulky jednotlivé knížky, jejich autory, ceny a žánry ke každé knize. Nemá někdo nějaký nápad, jak spojit tyto tabulky v controlleru, nebo jak místo toho použít SQL dotaz, který následně vypíši?

Předem Děkuji

Nahlásit jako SPAM
IP: 158.196.42.–
Reklama
Reklama
jakubk
~ Redaktor
+4
Posthunter
15. 5. 2013   #2
-
0
-

#1 hajnis
Ahoj, zrovna jeden web v MVC dělám a nemělo by být potřeba cokoliv spojovat - prostě v controlleru získej z DB všechny autory, které pak budeš foreachem ve view procházet. Zavoláním autor.NapsaneKnihy získáš všechny knihy daného autora atp. Tohle je možné díky těm kolekcím, které máš nadefinované v jednotlivých třídách, zároveň totiž reprezentují vazby mezi tabulkami v databázi.

Nahlásit jako SPAM
IP: 85.207.44.–
hajnis0
Newbie
15. 5. 2013   #3
-
0
-

No to jsou dvě tabulky, ale jak bych měl spojit i se třetí tabulkou žánry? To mi právě moc nejde na mozek

Nahlásit jako SPAM
IP: 2001:718:1001:693:bd56:88...–
hajnis0
Newbie
15. 5. 2013   #4
-
0
-

Na něco jsem možná přišel. Upravil jsem controller  na následující znění:

public ActionResult Index()
        {
            var viewInfo = new AutorKnihaDalsi();
            viewInfo.Autori = db.Autori.Include(c => c.NapsaneKnihy);
            return View(viewInfo);
        }

A Index.cshtml:

@model Skola.ViewModels.AutorKnihaDalsi

@{
    ViewBag.Title = "Index";
}
<table>
    <tr>
        <th>
            Autor
        </th>
    </tr>
    @foreach (var item in Model.Autori)
    {
        <tr>
            <td>
                @item.CeleJMeno
            </td>
            @foreach (var item2 in item)// zde i to hází chybu
            {
                    <td>
                        @item2.NazevKnihy
                    </td>
            }
        </tr>
    }
</table>

..avšak při druhém foreach mi to hází chybu,

Error 2 foreach statement cannot operate on variables of type 'Skola.Models.Autor' because 'Skola.Models.Autor' does not contain a public definition for 'GetEnumerator' 

Nevíte někdo jak se této chybě vyvarovat? Zřejmě by se měl upravit ten controller, ale nevím jak.

Nahlásit jako SPAM
IP: 158.196.42.–
P
~ Anonymní uživatel
193 příspěvků
16. 5. 2013   #5
-
0
-

Asi

@foreach (var item2 in item.NapsaneKnihy)

ne?

Nahlásit jako SPAM
IP: 85.93.116.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 91 hostů

Podobná vlákna

Výpis z více tabulek — založil vastyls

Vypis vice dat podle abecedy — založil tribalcz

Výpis z databáze více dat než tam je — založil Lukáš Šálek

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý