Data hent og gem fra databasen (via entaties) asp.net 3.5

Tags:    asp.net

Godaften alle sammen,

Jeg Lærte for ca 2 år siden asp.net 2.0 i skolen. Jeg sidder nu og prøver sætte mig ind i asp.net 3.5 ved at programmere en webapplikation.

Jeg husker dengang jeg lærte asp.net fik vi fortalt at vi henter data fra databasen via objekter. De objekter var typisk entatier med get og set.

Jeg har f.eks i basen 6 tabler Nybruger, Annoncer, Billededata, Kategori1, Kategorie2, lokation

Hvordan definere man Objekt_skabolon , altså entity classen af dem.
Laver man en Stor klase, hvor man definere alle felter fra de databaser med fremmednøgler os.
Noget i den retning

Class Med alt
{
public string navn{get; set ;}
public string overskrift{get; set ;}
public string Lokation{get; set ;}
public string Sko{get; set ;}
public string Hjemmesko{get; set ;}
}
Hvis man laver flere classer... så bliver prgrammet tung, for skal man join enneti og deres data i backend.

Jeg håber i kan FoRSTÅ hvad jeg sprøger om. Det er svært at forklare!

Eller gør man det på en anden måde.

Håber nogen kan forklare det på en måde, så jeg også kan forstå det :)



4 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
Hvis du tilføjer en ADO.NET Enitity Model genererer den alle klasserne for dig ud fra en eksiterende database.

Som noget af det nyere (kræver Entity Framework 4.1), kan du også gøre det omvendt, hvor din database bliver oprettet udfra dine klasser...

Og ja, uanset hvilke af metoderne du vælger, så opretter opretter du en instans af din DB-klasse når du skal tilgå databasen - hvor du så kan hente eller skrive data i form af de respektive klasser.

Mht. hastigheden, så har jeg ikke oplevet den store forskel. Men har heller ikke lavet store communities eller andre stressede sider, men dog med mere eller mindre komplekse databaser. Jeg har dog erfaret, at hvis serveren lige er genstartet, eller IIS har lukket den midlertidig, så tager det ekstra tid første gang du skal tilgå databasen - i sær hvis du bruger codefirst metoden, men at arbejder ud fra de klasser du selv har skrevet. Det er fordi den skal kontrollere at tingene passer sammen.

Code first:
http://www.pluralsight-training.net/microsoft/players/PSODPlayer?author=scott-allen&name=mvc3-building-data-i&mode=live&clip=0&course=aspdotnet-mvc3-intro
http://www.asp.net/entity-framework/tutorials/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application

Database first:
http://www.asp.net/mvc/tutorials/creating-model-classes-with-the-entity-framework-cs

Og lidt flere: http://www.asp.net/mvc - ved godt det er under MVC, men det som du skal bruge er det samme. Synes i hvert fald det er fine guides, som blev brugt flittigt i foråret. :)

edit: Nå ja, LINQ: http://www.pluralsight-training.net/microsoft/players/PSODPlayer?author=scott-allen&name=mvc3-building-data-i&mode=live&clip=4&course=aspdotnet-mvc3-intro



Indlæg senest redigeret d. 03.11.2011 01:25 af Bruger #16372
Det lyder interessant, men det forvirrer mig alligvel lidt.

Når vi f.eks henter data fra databasen, bliver de hentet fra forkellige tabler. Så spørgsmålet er , de indhentet data i hvilken Enitity classe - objekt de skal gemmes i.

Vi tager en LILLE eksempel:

Vi har 3 tabeller:

1:Bruger(BRUGERID, Navn, alder, tlfnr,FK_VennerID)
2:Venner(VENNERID, navn, alder,Koen,FK_LokationID)
3:Lokation(LOKATIONID,Postnr, byNavn)

Nu laver vi sql, som lister en brugers venner op med navn alder og nynavn.
Alstå vores sql giver outputtet:

Bruger.Navn,Venner.navn,venner.alder,lokation.postnr,Lokation.bynavn

Hvordan skal man gemme se data i Enitity objekter ?


Entatiye for de 3 tabler, bliver sådan (Nytakst er ikek korrekt, men håber i forstå, hvad jeg mener!)

class Bruger( BRUGERID get; set;, Navn get; set;, alder get; set;, tlfnr get; set;,FK_VennerID get; set;)
class Venner(VENNERID get; set;, navn get; set;, alder get; set;,Koen get; set;,FK_LokationID get; set;)
Lokation(LOKATIONID et; set;,Postnr et; set;, byNavn et; set;)



Hvis du tager udgangspunkt i de tre tabeller du nævner, og du laver en ADO.NET Entity Data Model, får du genereret tre klasser, som minder om det her (typerne og relationerne er sådan jeg tolker det):

Fold kodeboks ind/udCSharp kode 


Hvis du så har kaldt din model for DbModel, kan du finde en bruger, lad os sige fra telefon nr, ved at skrive:

Fold kodeboks ind/udCSharp kode 


Smed en KeyNotFoundException() ind for at gøre dig opmærksom på at den kan komme med en null værdi.

Så har du en bruger med alle de properties du har i din database. Hvis du vil ind og søge i hans venner, evt. en søgning efter postnummer, kan du skrive:

Fold kodeboks ind/udCSharp kode 


For at tilgå brugerens venner, kan du:

Fold kodeboks ind/udCSharp kode 


Det er efter min overbevisning den nemmeste må at arbejde med sine databaser på.. håber jeg har forstået dig rigtigt, så jeg ikke gør dig mere forvirret i stedet!






Sådan skal det spørges :)

Jeg har 3 tabeller:

1 Bruger(BRUGERID, Navn, alder, tlfnr,FK_VennerID)
2: Venner(VENNERID, navn, alder,Koen,FK_LokationID)
3: Lokation(LOKATIONID,Postnr, byNavn)


Udfra de 3 tabeller, bliver følgende Entity Model lavet:

Fold kodeboks ind/udCSharp kode 


Lad os nu antage, at jeg har nede i databasen defineret en sql stored procedure, Som tager og giver mig følgende data fra de 3 tabeller :

Bruger.Navn,Venner.navn,venner.alder,lokation.postnr,Lokation.bynavn


Så det jeg ønsker at vide og have hjælp til er følgende:

Jeg skal have lavet en DaaL layer, med en fundktion som bruger Linq to sql til køre denne sql stored procedure og returne en liste over datae til mig.
Noget i den retning:

Void xxx GetUserinformation(Int UserID)
{



Retunn XX;
}


Hvordan kan man gøre det i Linq to sql og hvordan bestemmer jeg om hvilen Return type funktionen skal have, skal det være Bruger , Venner, Lokation eller hvad for det indholder jo data fra alle de tre tabeller ?!!




Indlæg senest redigeret d. 04.11.2011 08:55 af Bruger #16842
t