Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

EntityFramework i citanje iz vise tabela

[es] :: .NET :: WPF Programiranje :: EntityFramework i citanje iz vise tabela

Strane: 1 2

[ Pregleda: 11021 | Odgovora: 24 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

theilusion

Član broj: 331616
Poruke: 44
*.teol.net.



+1 Profil

icon EntityFramework i citanje iz vise tabela03.05.2016. u 13:28 - pre 96 meseci
Interesuje me kako se ovi problemi rješavaju sa EF Database First pristupom.
Npr. Imam 3 ili više tabela koje su u relaciji i treba da čitam određene kolone iz sve tri tabele.
Moram da radim JOIN tabela. Rezultat je npr neka lista objekata koji pripadaju različitim klasama.
Sad kada bi ja to "bindovao" desilo bi mi se da imam "binding" na isti property 2 ili više puta,
jer npr imam property "Name" u dve tabele i treba da ih prikazem u rezultujucoj listi. Valjda sam
bio razumljiv s obzirom da sam naveo da podatke treba da citam iz vise tabela.
Da li se pravi neki "view" u bazi u tom slucaju ili to može da se reši voleo bih da me neko "prosvetli"
malo. Neki link dp primera bi takođe dobrodosao.
Hvala unapred.
 
Odgovor na temu

Predrag Supurovic
Pedja YT9TP
Užice

Član broj: 157129
Poruke: 6275

Sajt: pedja.supurovic.net


+1570 Profil

icon Re: EntityFramework i citanje iz vise tabela03.05.2016. u 20:06 - pre 96 meseci
Kada imas relaciju izmedju tabela u EF ces to dobiti kao vezu izmedju objekata. Osnovna tabel ace iamti propertui koji je tipa objekta druge tabele i sve podatke iz druge tabele ces imati u tom propertiju, kao poseban objekat (ili listu objekata ako se radi o M strani) tako da neces imati preklapanje sa imenima polja.

Primer:


OsobaEntity {
string ime;
string prezime;
MestoEntity mesto;
}


MestoEntity {
string naziv;
string postanski_broj;
}



 
Odgovor na temu

theilusion

Član broj: 331616
Poruke: 44
31.223.144.*



+1 Profil

icon Re: EntityFramework i citanje iz vise tabela03.05.2016. u 21:28 - pre 96 meseci
Mislim da nisam shvatio.
Kako je to moguce ako ja imam ovakve tabele:

Class Car{
int idcar,
string name,
string type
}

Class Driver{
int iddriver
string name,
string lastname,
string contact
}

Class CarDriver{
int idcar,
int iddriver
}

Treba mi "name" iz Car i "name" iz Driver. Ovo je samo onako primer napamet. Meni treba mnogo slozeniji upit iz vise tabela gde u najmanje 3 tabele imam isti naziv kolone, kasnije property-ja itd. Ako moze neki link gdje je ovo ilustrovano bio bih vam zahvalan. Hvala vam što se interesujete.
 
Odgovor na temu

Predrag Supurovic
Pedja YT9TP
Užice

Član broj: 157129
Poruke: 6275

Sajt: pedja.supurovic.net


+1570 Profil

icon Re: EntityFramework i citanje iz vise tabela03.05.2016. u 23:00 - pre 96 meseci
Neš to ti tu nije u redu.

Trebalo bi da bude

Class CarDriver{
Car car,
Driver driver
}

 
Odgovor na temu

theilusion

Član broj: 331616
Poruke: 44
*.teol.net.



+1 Profil

icon Re: EntityFramework i citanje iz vise tabela04.05.2016. u 06:07 - pre 96 meseci
Pa to su samo nazivi tabela u bazi.
EF ih preslika u klase po modelu DatabaseFirst.
Dakle ja imam bazu koju sam izmodelovao u jednom drugom softveru i samo sam u VisualStudiju
generisao EF model i to je to. Ne znam šta je uopšte bitno kako se zovu tabele ili klase.
 
Odgovor na temu

Predrag Supurovic
Pedja YT9TP
Užice

Član broj: 157129
Poruke: 6275

Sajt: pedja.supurovic.net


+1570 Profil

icon Re: EntityFramework i citanje iz vise tabela04.05.2016. u 09:52 - pre 96 meseci
Nije bitno kako se zovu, bitne su veze između njih.
U primeru koji sam ti dao nisu bitna imena polja nego njihovi tipovi.

 
Odgovor na temu

theilusion

Član broj: 331616
Poruke: 44
*.teol.net.



+1 Profil

icon Re: EntityFramework i citanje iz vise tabela04.05.2016. u 10:12 - pre 96 meseci
Ako imate link primera gde je nesto slicno ilustrovano bilo bi dobro.
Ovako ne mogu skapiram.Ili jednostavno da vam dam konkretan primer, imena tabela u bazi, kolone iz tih tabela koje mi trebaju,
da napravite upit i smestite rezultat u listu.
 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1343
*.dynamic.sbb.rs.



+311 Profil

icon Re: EntityFramework i citanje iz vise tabela04.05.2016. u 10:28 - pre 96 meseci
Možeš da napišeš klasu koja ima propertije koje vraća upit:

http://stackoverflow.com/a/18608759/461810
Code:

public class CarDriver
{
    public int CarID { get; set; }
    public string CarName { get; set; }
    public int DriverID { get; set; }
    public string DriverName { get; set; }

    public static List<CarDriver> LoadCarDrivers();
    {
        MyDataContext dbContext = new MyDataContext(connectionString);
        return dbContext.Database.SqlQuery<CarDriver>
               ("SELECT Car.ID as CarID, Car.Name AS CarName, Driver.ID as DriverID, Driver.Name AS DriverName FROM Car, Driver").ToList();
    }


Ili onako kako je Pedja napisao... ne znam šta je problem da binduješ na recimo item.car.name?
 
Odgovor na temu

Predrag Supurovic
Pedja YT9TP
Užice

Član broj: 157129
Poruke: 6275

Sajt: pedja.supurovic.net


+1570 Profil

icon Re: EntityFramework i citanje iz vise tabela04.05.2016. u 16:15 - pre 96 meseci
Hm, problem je što izgleda kada se rai Database First generisani Entity objekti ne sadrže veze, pa to mora naknadno da se doda. Zato je theilusion zbunjen ovim sto sam rekao jer on te veze u objektnom modelu nema.

theilusion, biće da ti ne gine da proučiš Code first, jer ćeš tako naučiti da sam napraviš veze između entiteta.


Dušane, ovo što si ti predložio će da radi, ali je u suprotnosti sa idejom korišćenja EntityFrameworka.
 
Odgovor na temu

theilusion

Član broj: 331616
Poruke: 44
31.223.144.*



+1 Profil

icon Re: EntityFramework i citanje iz vise tabela04.05.2016. u 21:36 - pre 96 meseci
Aha. Razmotricu ovaj primer od @dusans. Deluje mi ok.
Da li ja narusavam nesto ako generisem EF model po principu "databse first" a onda naknadno da malo "rucno popravim".
Jednostavno dodam ove veze koje mi trebaju da bih mogao da napravim upit. Dakle u fazi sam ucenja EF pa ne znam da li
postoji neki "custom" pristup pri generisanju EF modela.
 
Odgovor na temu

Predrag Supurovic
Pedja YT9TP
Užice

Član broj: 157129
Poruke: 6275

Sajt: pedja.supurovic.net


+1570 Profil

icon Re: EntityFramework i citanje iz vise tabela05.05.2016. u 06:21 - pre 96 meseci
Naravno da ne. To je tako i zamisljeno, database first mozes da uadis samo jednom, a posle kastomizujes.

Kad udjes u stos onda batalis database first i radis code first, jer ti to svakako ne gine, a bar imas punu kontrolu.

 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: EntityFramework i citanje iz vise tabela05.05.2016. u 19:24 - pre 96 meseci
Database first radi veze ako tabele u bazi sadrze referencijalni integritet. Ako si radio database-first i prevukao table u dizajner i nemas relacije, onda ih nemas ni u bazi i treba da se vratis na taj posao ponovo. ne znam koji si alat koristio za dizajn baze, ali skoro svi za koje ja znam podrzavaju relacioni model.

Potpuno je pogresan pristup koristiti bazu sa nepovezanim tabelama i onda simulariti relacije na aplikativnom nivou, na stranu mogucnost da cela baza postane sje*ana, database engine nema pojma o vezama iz join-a i ne moze efikasno da optimizuje izvrsavanje. To je, sto bi rekli, fireable offense.

Ove vrste brljotina sa krpljenjem baze u kodu su inace razlog zasto mi ne dozvoljavamo code-first. Postoji razlog zasto se arhitektura baza ceni i placa.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

theilusion

Član broj: 331616
Poruke: 44
31.223.144.*



+1 Profil

icon Re: EntityFramework i citanje iz vise tabela05.05.2016. u 23:05 - pre 96 meseci
Hej ljudi hvala puno na savetima.
Cim stignem pisem detaljnije o bazi koju imam.
Sto se tice referencijalnog integriteta meni su sve "ON UPDATE" i "ON DELETE" akcije postavljene na "NO ACTION".
To se dobije po default-u kada se za modelovanje koristi Sybase PowerDesigner koji sam ja koristio.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: EntityFramework i citanje iz vise tabela06.05.2016. u 00:05 - pre 96 meseci
A da ti nisi kod Perisica na FTNu?

Proveri malo model, akcija nije vazna za tvoj problem, prveri u samoj generisucioj skripti ili na samoj bazi da li uopste postoje foreign keys u tabelama. Ja iskreno ne podnosim organski PowerDesigner, mnogo je abstraktan, postoje mnogo bolja resenja ako si fokusiran na (T)SQL baze.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

theilusion

Član broj: 331616
Poruke: 44
31.223.144.*



+1 Profil

icon Re: EntityFramework i citanje iz vise tabela07.05.2016. u 17:46 - pre 96 meseci
Mali sam citao jos tema vezano za ovu moju problematiku i dosao sam do zakljucka da se mozda ne razumemo :)
Postavicu sliku dela modela koji sam generisao po DatabaseFirst konceptu konkretnog primera.
Napominjema da sam model lepo proverio, proverio ralacije, uocio strane kljuceve i reference.
Na modelu će se videti da imam i navigacione property-je.

Evo konkretnog primera:
Imam tabelu RequistionSparePart koja je u vezi sa tabelama Car i SparePartProperty, to se vidi sa slike. Treba mi upit koji ce mi puniti listu sa svim proeprty iz RequistionSparePart i treba mi property name iz Car kao i property name iz SparePartProperty. Koliko sam shvatio iz literature JOIN ne bih trebao ni da koristim i da bih problem mogao da resim preko ovih navigacionih property-ja. Ako treba postavicu i onaj deo gde se vide mapiranja.


Prikačeni fajlovi
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: EntityFramework i citanje iz vise tabela08.05.2016. u 21:01 - pre 96 meseci
Ok, sad se onda konacno razumemo. Kad radis LINQ zaboravi na join-e kad imas navigacione propertije.

Dakle, postoji vise nacina da dobijes to sto hoces. Koji ces primeniti zavisi od tvoje konkretne potrebe, ali da bi ti bilo jasnije o cemu pricam, pogledaj na netu

"Eager loading" "Lazy loading" i "Explicit loading" za EF.NET

poenta je da das hintove/instrukcije EF.NETu sta da ti preloaduje i onda pustis da EF.NET sam rascivija jedan ili selectova da ti vrati to sto hoces.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

theilusion

Član broj: 331616
Poruke: 44
31.223.144.*



+1 Profil

icon Re: EntityFramework i citanje iz vise tabela08.05.2016. u 22:46 - pre 96 meseci
Hvala na odgovoru pogledacu.
Jos kada bi neki link sa primerom gde je pokazano "bindovanje" datagrid-a koji treba da prikazem bilo bi sjajno.
U svakom slucaju hvala na smernicama googlacu.
 
Odgovor na temu

djordjeno
Srbija

Član broj: 35204
Poruke: 332
*.mobitel.si.

Sajt: www.mobitel.si


+42 Profil

icon Re: EntityFramework i citanje iz vise tabela09.05.2016. u 09:11 - pre 96 meseci
Citat:
mmix: Ok, sad se onda konacno razumemo. Kad radis LINQ zaboravi na join-e kad imas navigacione propertije.

Dakle, postoji vise nacina da dobijes to sto hoces. Koji ces primeniti zavisi od tvoje konkretne potrebe, ali da bi ti bilo jasnije o cemu pricam, pogledaj na netu

"Eager loading" "Lazy loading" i "Explicit loading" za EF.NET

poenta je da das hintove/instrukcije EF.NETu sta da ti preloaduje i onda pustis da EF.NET sam rascivija jedan ili selectova da ti vrati to sto hoces.


Meni je u EF zasmetalo sledece a u vezi je se tim o cemu pricas:
EF postavi sve navigacione propertije koje pronadje u shemi baze podataka i za njih generise u modelu odgovarajuce veze.
Vrlo cest je slucaj da dosta od njih nisu potrebni ni za jedan upit u aplikaciji, jer jednostavno nema zahteva.
I recimo ako odstranite te veze iz EF dizajnera (delete na navigacioni property), svaki sledeci put kad se uradi update modela (npr doda se novo polje) te veze se opet pojave.
 
Odgovor na temu

theilusion

Član broj: 331616
Poruke: 44
31.223.144.*



+1 Profil

icon Re: EntityFramework i citanje iz vise tabela09.05.2016. u 13:06 - pre 95 meseci
Pa dobro. Verujem da kako vreme bude odmicalo da ce i EF biti "pametniji".
Međutim, to što ti kažeš, ako sam dobro razumeo, i nije neki nedostatak jer odakle
model zna kakve ćeš ti ti zahteve da praviš i mora na neki način da se osigura.
To mi nekako dođe kao kada modeluješ bazu pa "dumaš" hoće li tvoj koncept zadovoljiti
vezu 1:n ili da bi bio siguran, "pošto nisi siguran", ti staviš vezu m:n.

Da se vratim mom problemu, našao sam dosta prepiske na ovu temu što mi je preporučio
& mmix, međutim nisam našao ništa konkretno kako da ovo iskoristim za moju WPF aplikaciju,
tačnije kako da nidujem moja polja u datagrid.
Evo konkretno za ove 3 tabele moj datagrid bi trebao da izgleda ovako:

Code:

<DataGrid Name="ListReq" AutoGenerateColumns="False" IsReadOnly="True">
       <DataGrid.Columns>
               <DataGridTextColumn  Header="Datum zahteva" />  //RequistionSparePart
               <DataGridTextColumn  Header="Datum izdavanja" />  //RequistionSparePart
               <DataGridTextColumn  Header="Br. zahteva" />  //RequistionSparePart
               <DataGridTextColumn  Header="Trebovana količina" />  //RequistionSparePart
               <DataGridTextColumn  Header="Izdata količina" />  //RequistionSparePart
               <DataGridTextColumn  Header="Naziv materijala" />  //SparePartProperty
               <DataGridTextColumn  Header="SAP broj" />   //SparePartProperty
               <DataGridTextColumn  Header="Ime vozila" />  //Car
               <DataGridTextColumn  Header="Broj motora vozila" />  //Car
      </DataGrid.Columns>
</DataGrid>


Iza svakog taga sam stavio koje bolje iz koje tabele iz baze bi tu trebalo da se binduje.
Da li ću ja objekte iz mog upita da smeštam u neku listu ili pravim neki datatable.
Gotovo sve primere koje sam našao objašnjeni su na konzolnoj aplikaciji. Koliko sam shvatio
ja bih za ovaj moj problem trebao da koristim "Eager loading".

P.S. Srećan dan pobede nad fašizmom :)
 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1343
*.dynamic.sbb.rs.



+311 Profil

icon Re: EntityFramework i citanje iz vise tabela09.05.2016. u 13:18 - pre 95 meseci
Izvučeš RequistionSparePart u neku listu i dalje binduješ ovako:

Code:

Binding="{Binding dateOfRequest}"
...

Binding="{Binding SparePartProperty.name}"
...

Binding="{Binding Car.name}"
...


Eager loading koristiš da ti ne bi za svaki rekord skakao u bazu kad treba da učita recimo Car.
 
Odgovor na temu

[es] :: .NET :: WPF Programiranje :: EntityFramework i citanje iz vise tabela

Strane: 1 2

[ Pregleda: 11021 | Odgovora: 24 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.