2012-04-05 2 views
8

Ich beginne gerade ein extrem großes Webprojekt und versuche wirklich alles richtig zu machen.Warum sollte ich Entity Framework Code zuerst verwenden, wenn es nicht sicher in der Produktion verwendet werden kann und Dinge wie Indizes nicht beschrieben werden können

Meine Tools so weit

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

alles gut geht, aber ich bin der Suche nach ein paar Dinge mit Entity Framework CodeFirst ein bisschen skizzenhaft.

Zum Beispiel musste ich http://codefirstmembership.codeplex.com/ verwenden, um Mitgliedschaftsinformationen als Teil des ersten Setups 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.

Jetzt darüber hinaus scheint es, dass dieses Zeug probsam wird, wenn ich in der Live-Umgebung laufe. Alle Schemaänderungen, die ich zwischen der Dev-Datenbank und der Live-Datenbank 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.

So denke ich jetzt. 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. Ich hatte also gehofft, dass der Code zuerst diese Situation durchsetzen würde, um mich zu verbessern, aber ich fühle mich, dass ich zuerst in die DB gehen sollte, und streng darauf achten, sie 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 Nhibinate zu vergleichen?

+0

Wenn Sie nicht an eine bestimmte DB gebunden sind, möchten Sie vielleicht etwas wie RavenDB betrachten. –

+0

Ich bin nicht wirklich abgeneigt, MSSQL zu verwenden, wir sollten in der Lage sein, Teile davon zu migrieren, also können wir einfach mit der Standard Edition skalieren, die EC2 mit einer relativ ordentlichen Rate unterstützt. Wahrscheinlich würde er vor Raven nach Mongo oder Couch schauen, irgendeinen Grund, zuerst nach Raven zu gehen? –

+1

Eine Sache zu prüfen ist, was Sie zuerst außerhalb des Codes wollen. Wollen Sie wirklich Ihre Tabellen im Code definieren und damit die Datenbank erstellen, oder ist es der POCO-Aspekt von EF 4.3? Der Grund, warum ich frage, ist, dass Sie POCOs und DbContext mit Database First oder Model First verwenden können (Sie können ein benutzerdefiniertes T4 erstellen, um die POCOs aus Ihrem Modell zu generieren). Der Grund, warum ich frage ist, weil ich manchmal Leute sehe, die über "Code zuerst" schreiben, wenn die Sache, dass sie wirklich nach der Arbeit mit POCO/DbContext sind. – JMarsch

Antwort

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 Release-Version verfügbar sein.

Check out: https://blogs.msdn.com/b/adonet/archive/2012/02/09/ef-4-3-automatic-migrations-walkthrough.aspx?Redirected=true

Check out: http://coding.abel.nu/tag/ef-migrations/

+0

Kommentar von diesem Blog –

+0

Natürlich hat die Datenbank mehr Objekte als das Code First-Modell; Das Modell wird nicht in der Lage sein, alles, was SQL Server hat (Indizes, Statistiken, Spaltenreihenfolge, Objektbeschreibungen, berechnete Spalten, Sprocs, Ansichten usw.), in absehbarer Zeit zu beschreiben, unabhängig davon, wie viel Aufwand in die Metadateninfrastruktur von EF Migrations und Code First gesteckt wird. Aus diesem Grund glaube ich fest daran, dass die Datenbank mit Datenbank-Tools und nicht mit EF Migrations entwickelt werden sollte.Microsoft SQL Server Data Tools macht diesen Job sehr gut mit seiner Versionssteuerungsfunktionalität, Snapshots, Localdb usw. Migrationen sind nicht genug –

+0

Es ist immer der Nachteil, automatisierte Tools zu verwenden, um einen DBA-Job zu erledigen. – jessehouwing

3

Nur meine Meinung dazu ...

Sie brauchen nicht eine Wahl für gut zu machen -

können Sie Verwenden Sie Seed, benutzerdefinierte Initialisierung (und Migrationen Hand in Hand - mit Migrationen können Sie sie tatsächlich manuell ändern, z. B. Indizes hinzufügen usw. - obwohl sorgfältig), um das rohe SQL (und die meisten Bedürfnisse c) "injizieren" c würde davon abgedeckt 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 besteht.

Sie können es zum Prototyping Dinge und Start - erhalten Sie Ihre C# Struktur an Ort und Stelle und schnell - dann gestalten Sie es später - oder einmal behoben verwenden einige 'verwenden bestehende Initialisierer', die nichts aus dem Code und alles verschieben nach DB-Seite und Ihrem DBA.

IMO, Sie können 'sehr weit' in diesem Sinne gehen, bevor Sie tatsächlich CF ausschalten müssen und nur von Db arbeiten.

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

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

Auch EF/CF hat sich seit den Anfängen wirklich einen langen Weg gegangen - ich habe es seit dem Start - und es hatte anfangs 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 dem 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, Ansichten (mit linq - als ob du LINQ nicht verwenden solltest, ist einer der großen "Profis" weg) - was in EF 5.0 erscheinen sollte (ich habe es nicht überprüft, aber es ist was sie versprechen) - wie für komplexere Szenarien müssen Sie auf der SQL-Seite optimieren (oder um benutzerdefinierte Abfragen auf der Rückseite und dann ausführen zu können) Karte zurück, 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, Sie können tatsächlich benutzerdefinierte Abfragen ausführen und dann auf Ihre Objekte zuordnen - aber diese Art von Arbeiten, und Sie können nicht alles tun, so ist es in gewisser Weise begrenzt)

Leistung mit Abfragen und wieder für anspruchsvollere schwere Dienstszenarien - das war mein Hauptproblem. Das verspricht auch, in EF 5.0 besser zu werden - also abwarten.

Nachdem ich gesagt habe -
ist mein Favorit eine benutzerdefinierte oder Open Source Code zuerst wie Lösung, 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 jeder

Verwandte Themen