예제 #1
0
        public async Task <bool> Lagre(Kunde innKunde)
        {
            try
            {
                var nyKundeRad = new Kunder();
                nyKundeRad.Fornavn   = innKunde.Fornavn;
                nyKundeRad.Etternavn = innKunde.Etternavn;
                nyKundeRad.Adresse   = innKunde.Adresse;

                var sjekkPostnr = await _db.Poststeder.FindAsync(innKunde.Postnr);

                if (sjekkPostnr == null)
                {
                    var poststedsRad = new Poststeder();
                    poststedsRad.Postnr   = innKunde.Postnr;
                    poststedsRad.Poststed = innKunde.Poststed;
                    nyKundeRad.Poststed   = poststedsRad;
                }
                else
                {
                    nyKundeRad.Poststed = sjekkPostnr;
                }
                _db.Kunder.Add(nyKundeRad);
                await _db.SaveChangesAsync();

                return(true);
            }
            catch
            {
                return(false);
            }
        }
        /**
         * Lagre metoden blir mer komplisert når på 3. normalform fordi vi må forholde
         * oss til den kunden som kommer inn her (som er den flate kunden), den kunden som
         * ikke ligger sammen med context klassen, men den som ligger for seg selv.
         * Vi må omforme de attributtene som kommer inn i innKunde til den strukturen i
         * tabellene i context klassen hvor de er hver for seg.
         **/
        public async Task <bool> Lagre(Kunde innKunde)
        {
            try
            {
                var nyKundeRad = new Kunder();             //lager ny kunderad, må ta new på kunder, altså db-klassen
                nyKundeRad.Fornavn   = innKunde.Fornavn;   //må overføre attributtene som skal til inn i kunden fra innKunde
                nyKundeRad.Etternavn = innKunde.Etternavn; //tar ikke id når vi skal lagre, men begynner med fornavnet.
                nyKundeRad.Adresse   = innKunde.Adresse;   //det er disse tre som skal inn i kunden

                /**
                 * Så må vi sjekke om postnr eksisterer i db fra før av. Hvis det ikke gjør det så opprettes det
                 * et nytt poststedsobjekt og så legges det inn i kunden. Kunne ha lagt inn alle poststeder og nr fra
                 * hele landet på forhånd og da ville ikke lagringen vært så komplisert, men dette
                 * gjøres for å illustrere.
                 *
                 * Sjekker først om poststedet finnes (bruker FindAsync). Og nøkkelen til denne
                 * er innKunde.Postnr. Den returnerer enten poststedet eller null.
                 **/
                var sjekkPoststed = await _db.Poststeder.FindAsync(innKunde.Postnr);

                if (sjekkPoststed == null)                     //hvis poststedet ikke fantes
                {
                    var nyPoststedsRad = new Poststeder();     //da oppretter vi en ny poststedsrad
                    nyPoststedsRad.Postnr   = innKunde.Postnr; //så legger vi inn de to parameterne fra innKunde
                    nyPoststedsRad.Poststed = innKunde.Poststed;
                    nyKundeRad.Poststed     = nyPoststedsRad;  //legger inn poststedet (poststedsRad) inn i ny nyKundeRad. Da er poststedet lagt inn i kunden.
                }
                else
                {
                    nyKundeRad.Poststed = sjekkPoststed;
                }
                _db.Kunder.Add(nyKundeRad);
                await _db.SaveChangesAsync();

                return(true);
            }
            catch
            {
                return(false);
            }
        }