Actualizați schema de bază de date în Entity Framework

Am instalat VS SP1 și am jucat în jurul cu Entity Framework.

Am creat o schemă dintr-o bază de date existentă și am încercat câteva operații de bază.

Majoritatea au mers bine, cu excepția actualizării schemelor bazei de date.

Am schimbat baza de date în mod fundamental:

  • a adăugat un nou tabel
  • a șters o tabelă
  • a adăugat o coloană nouă într-un tabel existent
  • a șters o coloană dintr-un tabel existent
  • a schimbat tipul unei coloane existente

Primele trei au mers bine, dar schimbarea de tip și ștergerea coloanei nu au urmat modificările bazei de date.

Există vreo modalitate de a face este de lucru de la designer? Sau nu este acceptat în acest moment? Nu am gasit nici un material inca, dar inca caut.

0
fr hi bn
Da, este foarte matur acum, cu codefirst că nu mai am această problemă.
adăugat autor Biri, sursa
Întrebare mare. A avut aceeași problemă recent și cu câțiva ani în urmă. :-) Poate fi de menționat că redenumirea unei coloane existente ar putea provoca dureri de cap.
adăugat autor mnemonic, sursa

6 răspunsuri

Mi-ar ghici ca, eventual, acestea nu se intampla deoarece ar rupe constructia pentru codul existent, dar asta e doar o presupunere din partea mea.

Iată logica mea:

În primul rând, EF ar trebui să fie mai mult de 1: 1 de cartografiere a tablelor, deci este destul de posibil că doar pentru că ștergeți o coloană din tabelul A nu înseamnă că pentru acea entitate nu ar trebui să existe o descriere a proprietății. S-ar putea să ghiciți acea proprietate la alt tabel.

În al doilea rând, schimbarea unui tip ar putea doar să sparge clădirile. este singura rațiune acolo.

0
adăugat
Schimbarea unui tip ar putea sparge clădirile, însă în aplicațiile din lumea reală se întâmplă. RoR sau Django au o procedură extrem de scăzută de frecare pentru asta. Pentru a face față "rupturii", creați migrații de date. Dacă EF nu are acest lucru, atunci există multe de recuperat.
adăugat autor Csaba Toth, sursa

Am construit o aplicație similară cu cea solicitată. Dar soluția mea a fost greu. Voi încerca să-i spun;

  1. You have to create your own database management clases and these objects will be responsible for create, update database schema (I created manually that).

  2. I saw good article and source code on ADO.NET Team blog then you can also download EDMTools from this blog, it open source. And you can also implement model generation and update routines from that into your project.

  3. Finally when the your schema changed you should recreate and bind your model and rebuild your data assembly during runtime. But you have to know most important think, you should tie your data model assembly to your project with loosely coupled (check out this post)

    Other way, you should wait for EF 4.0 release (it CTP 1 now), they announced that they will provide create,delete,update DatabaseScript functions.

Blocare bună

0
adăugat

Din demonstrațiile designerului pe care l-am văzut, nu este un instrument impecabil. Este un produs de versiunea 1.0, deci este obligat să aibă câteva puncte de durere. Tipul schimbării este unul dintre ele. Din vizionarea designerului și a generării de coduri, mi-am dat seama că s-ar rupe fie la momentul compilării (nu este probabil), fie la timpul de execuție (când modelul este de fapt executat).

0
adăugat

Trebuie să ștergeți singură coloana de la designer sau din fișierul XML.

0
adăugat

Am constatat că, în general, există încă câteva bug-uri cu funcția "Update Model from Database".

Cheile sunt ucigașul pentru mine - nu am încă să fac modificări pe care le fac la o relație străină-cheie sau să adaug o cheie primară la o masă și să am funcția updater să funcționeze corect (prin faptul că va da o eroare de compilare a generat codul) - dar pentru a rezolva problema este o chestiune simplă de a șterge modelul și de a reimporta (durează doar un minut) - aceasta este mai puțin decât evidentă evident, dar nu am avut niciodată un eșec de importul "proaspăt".

0
adăugat
A fost atât de greșit să ștergeți și să începeți de la început ... dar cred că nu sunt singura persoană care a trebuit să recurgă la asta!
adăugat autor Matt Bridges, sursa

Modul în care fac acest lucru (și fac toate lucrurile pe care le menționați, plus redenumirea coloanelor) este prin modificarea bazei de date și regenerarea codului EF folosind EF Code First.

Nu fac modificări cu privire la codul EF de primă clasă pentru bine sau pentru rău (inclusiv coloane necunoscute pentru relații) pentru a ușura procesul.

Nici un generator de schemă de designer sau ORM nu va putea modifica baza de date de producție dacă are date constrânse în ea. De aceea ar trebui să începeți întotdeauna să verificați dacă modificările dvs. în DB sunt fezabile, să le încercați pe o bază de date de dezvoltare și apoi să vă adaptați codul pentru a reflecta modificările.

0
adăugat