08. oktober 2010 - 13:28Der er
8 kommentarer og 2 løsninger
Spørgsmål til Entity framework 4
Jeg har "rodet" lidt overordner med Entity framework 4 (EF), og umildbart er der ret let at gå til. Men er der nogle stor ulemper ved EF i forhold til andre mapping tools som jeg skal være opmærksom på?
Kan EF ikke opdatere en database når man laver rettelser i modellen? jeg synes kun at den kan generer en db ikke opdatere den?
Generelt set synes jeg ikke specielt godt om det, der er stadig mange ting der er mærkelige. Jeg har rodet med "Code First"/"Model First" ... som man så mapper mod ens DB, intet automatisk, men synes den gør det godt. Jeg synes ikke specielt godt om det når alt for meget bliver for automatisk.
Det er vist et one-way spm ... enten retter du i DB'en ... og så bliver din model opdateret derefter eller også modsat. Hvordan skulle man ellers finde ud af om en type skal ud eller ind :-)
En del af klasserne er også partial så du kan udvide dem ...
NHibernate er jeg ret sikker på er bedre og mere moden. Jeg skifter i hvert fald snart, når lige en masse andre ting er kommet på plads.
Hvis du googler vil du også kunne finde en millard posts omkring netop dette emne.
Hvis du afhænger 100% af MS teknoligier, så er EF4 nok den rigtige vej ... da det skulle have et bedre sammenspil med deres services.
Mht. at opdatere databasen på baggrund af en rettelser i modellen, så forstår jeg ikke dit svar. Den burde da kunne f.eks. kunne tilføje et felt i DB hvis jeg tilføjer et på modellen, uden at skulle lave en helt ny DB?
Ja, men hvad så modsat? Hvis du laver ting i DB'en? f.eks tilføjer et indexes? Det er smart til hurtigt at teste ting, men senere vil jeg til en hver tid altid lave DB'en selv ...
Nej, men det er jo netop det jeg også siger er problemet. Du kan ikke få 2-way.
Hvordan skal den nogen sinde vide hvem der har ret, hvis du fjerner et fejl enten fra modellen eller DB'en.
Jeg tror ikke der er understøttet 2-way, det ville i hvert fald kræver et form for source control for at vide hvem der har ændre sig (DB eller model)
Jeg ville klart gå efter at lave DB'en selv ... og lade din model opdatere. Du ville få problemer mange steder hvis din model fjerner properties fra din DB hvis den bliver stor.
Fra en praktisk synsvinkel: - hvis du retter i tabel strukturen er det formentligt fordi du tilføjer et felt - hvis du tilføjer et felt vil du sandsynligvis have sat nogle andre værdier end NULL
Hvis du alligevel skal sætter værdierne manuelt kan du vel lige så godt også tilføje feltet.
Endvidere kan du godt have situationer hvor klasser og tabeller ikke er 1:1 d.v.s. at en af dem har noget som den anden ikke har.
Så bliver det helt umuligt at finde ud af hvad der skal gøres automatisk.
Jeg spørg fordi at man løbende på modellen kan vælge, at opdater modellen fra DB, eller opdater DB fra modellen. Men det er kun den ene vej det virkede (hvis ikke man vælger at oprettet sin DB igen). Hvis man opdatere DB på baggrund af modellen tilretter den kun det scipt, den laver til oprettelse af DB. Jeg havde måske forstillet mig at den ville lave et script, som kunne update den eksisterende DB.
Never mind, det var også bare for at finde ud af hvad der var af muligheder :-)
Mange tak for jeres deltagelse!! Smid nogle svar så kommer der point :-)
Jeg har fundet svar på mit spørgsmål i et blog indlæg fra ScottGu. Man kan faktisk sætte det op så den automatisk "opdatere" databasen, dvs. den nedligger den og opretter en ny. Men så kan man opsætte noget standard test data, som bliver "proppet" i DB ved oprettelse.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.