Warum sollte ich den Entity Framework-Code zuerst verwenden, wenn er nicht sicher in der Produktion verwendet werden kann, und Dinge wie Indizes können nicht beschrieben werden

8

Ich starte gerade ein extrem großes Webprojekt und versuche wirklich alles richtig zu machen.

Meine bisher verwendeten Werkzeuge sind

  • ASP.NET MVC 3
  • Entity Framework 4.3
  • Ninjekt 3

Alles läuft gut, aber ich finde ein paar Dinge mit Entity Framework CodeFirst ein bisschen skizzenhaft.

Zum Beispiel musste ich Ссылка verwenden, um Mitgliedschaftsinformationen als Teil der ersten Einrichtung des Codes einzurichten. Das fühlt sich ein bisschen schwierig an, etwas Drittes davon zu benutzen. Natürlich sollte ich 1337 genug sein, um "meine eigenen zu rollen", aber ich möchte nicht von Anfang an zubeißen. Laufen aspnet_regsql fühlt sich schrecklich an und wird mit jedem db-Update verloren gehen. Wie auch immer, alles funktioniert mit der obigen Bibliothek und es ist nicht so schlimm. Gerüst scheint jedoch gebrochen zu haben.

Nun, abgesehen von all dem, scheint es, dass dieses Zeug wahr werden wird, wenn ich in der Live-Umgebung laufe. Alle Schemaänderungen, die ich zwischen der dev-db und der live db vornehmen möchte, müssen sowieso manuell mit Skripten verwaltet werden. An diesem Punkt verliere ich nicht zuerst den Code-Punkt?

Ich habe das letzte Jahr mit der Google App Engine gearbeitet und hatte gehofft, dass Code zuerst im Wesentlichen genauso funktioniert? Dh, Änderungen vornehmen und sie verändern die Live-Daten. Jetzt gehe ich davon aus, dass es in der Produktion nichts schadet, weil es in der App-Engine kein ernsthaftes Refactoring gemacht hat. Sie können also nie eine Tabelle mit AppEngine umbenennen. Es würde immer eine neue Tabelle erstellen und die alte verlassen. Sie müssten Daten manuell portieren.

Also denke ich jetzt nach. Warum gehst du nicht einfach zuerst zur Datenbank? Ich arbeite seit 3 ​​Jahren mit linq2sql und bin sehr zufrieden damit, zuerst db zu spielen. Obwohl TBH meine DB Source Control Stratergy ist ein wenig .... fehlt. Also habe ich gehofft, dass der Code zuerst diese Situation durchsetzen wird, um mich zu verbessern, aber ich fühle, dass ich zuerst DB gehen sollte, und streng sein, ihn unter Kontrolle zu halten.

Ich würde wirklich alle Gedanken über diese Art von Situation schätzen, und auch, wie ist das mit der Verwendung von Nhibinat zu vergleichen?

    
Chris Barry 05.04.2012, 23:37
quelle

2 Antworten

7

Das Upgrade-Szenario, das Sie beschreiben, wird in EF-Migrationen hinzugefügt. Die Go-Live-Version ist bereits verfügbar und sollte bald als offiziell unterstützte Version verfügbar sein.

Auschecken: Ссылка

Sehen Sie sich Ссылка

an     
jessehouwing 07.04.2012 18:56
quelle
3

Nur meine Meinung zu diesem ...

Sie müssen keine Wahl treffen -

Sie können Seed , benutzerdefinierten Initialisierer (und Migrationen Hand in Hand - mit Migrationen können Sie sie auch manuell ändern, z. B. Indizes dort hinzufügen etc. - obwohl sorgfältig), um das rohe SQL (und die meisten von der Bedarf könnte dadurch gedeckt werden). Soweit ich weiß, könnten Sie einen benutzerdefinierten Batch-Datei-Formular-Initialisierer (aber nicht versucht haben, obwohl ich nicht sehe, warum nicht). Migrationen werden über PS ausgeführt, daher vermute ich, dass auch auf dieser Seite Platz für die Integration ist.

Sie können es verwenden, um Dinge zu prototypieren und zu starten - bringen Sie Ihre C # -Struktur schnell und an Ort und Stelle - und gestalten Sie sie später - oder verwenden Sie einen vorhandenen Initialisierer, der nichts mit dem Code zu tun hat DB Seite und dein DBA.

IMO, du kannst in diesem Sinne "sehr weit" gehen, bevor du CF ausschalten und einfach nur von Db arbeiten musst.

Für größere Datenbanken oder Unternehmensumgebungen ist es definitiv nicht das richtige Werkzeug für den Job.

Ich denke, es ist jetzt sicher für die Produktion - aber hängt davon ab, was Sie für sicher halten, wenige Dinge ...

Auch EF / CF hat seit den Anfängen wirklich einen langen Weg zurückgelegt - ich habe es seit dem Start benutzt - und es hatte anfänglich große Probleme. Die neuesten Versionen sind jetzt auf allen Seiten ziemlich solide, also denke ich.

... auf der Kehrseite - Ich hatte einige ziemlich komplexe Szenarien mit Code First Approach (EF und anders) ausgearbeitet. Allerdings haben mich einige Dinge mit EF zurückgehalten (zusätzlich zu dem, was du erwähnt hast) ...

UDF-Unterstützung, Views (mit linq - als ob du LINQ nicht verwenden solltest, ist eines der großen 'Profis' weg) - was in EF 5.0 auftauchen sollte (Ich habe es nicht überprüft, aber es ist was sie versprechen ) - für komplexere Szenarien müssen Sie auf der SQL-Seite optimieren (oder in der Lage sein, benutzerdefinierte Abfragen auf der Rückseite auszuführen und dann zurückzulagern, dh mehr Flexibilität auf dieser Seite). Das ist eine vielversprechende Sache, wenn es kommt (obwohl ich nicht perfekt sein werde, erwarte ich). (Auf der positiven Seite können Sie tatsächlich benutzerdefinierte Abfragen ausführen und dann Ihren Objekten zuordnen - aber diese Art von Arbeiten, und Sie können nicht alles tun, so dass es in gewisser Weise begrenzt ist)

Performance mit Abfragen und wieder für anspruchsvollere Heavy-Duty-Szenarien - das war mein Hauptproblem. Das verspricht auch, in EF 5.0 besser zu werden - also abwarten.

Nachdem ich das gesagt habe -
Mein Favorit ist ein benutzerdefinierter oder Open-Source-Code wie zum Beispiel ORM, wo Sie mehr Dinge unter Kontrolle haben können. Immer noch viele Anbieter Unterstützung usw. macht "offizielle" oder MS-Implementierungen auf lange Sicht lebensfähiger.

hoffe das hilft jedem

    
NSGaga 15.04.2012 18:29
quelle