2012-04-12 4 views
0

Stimmen wir zu, dass das Hinzufügen von Validierungsattributen direkt über automatisch generierten POCOs-Entitäten (wie mit der EF 4.x Dbcontext Generator-Vorlage) bedeutungslos ist?Textvorlagen (als EF 4.x Generator) und Validierungsattribute auf Pocos?

Da jedes Mal, wenn das Werkzeug ausgeführt wird, Attribute gelöscht werden.

Meine Frage ist: Gibt es eine Möglichkeit, sowohl automatisch generierte Pocos Entitäten einerseits und Validierungsattribute andererseits zu erhalten?

Scheint, dass es mit einem ersten Code-Ansatz möglich wäre?

Eigentlich sorte ich mein Projekt mit einer Datenbank ersten Ansatz und automatisch generiert meine POCOs. Wäre es möglich, .tt-Dateien loszuwerden, generierte Pocos zu behalten und Code-First-Approach für die Verwaltung neuer Felder, Validierungsattribute (und so weiter ...) zu verwenden? Werden die Änderungen an POCOs meine Datenbanktabellen aktualisieren?

Vielen Dank für Ihre Lichter.

Antwort

1

Sie haben hier einige Probleme. Die erste besteht darin, dass Sie versuchen, Validierungsattribute in Ihren Datenmodellklassen zu platzieren. Dies bedeutet, dass Sie Ihre Datenobjekte direkt an Ihre Ansichten übergeben. Während das funktioniert, ist es nicht der empfohlene Weg, dies zu tun.

Sie sollten stattdessen View-Modelle haben, die nur die Informationen enthalten, die für eine bestimmte Ansicht benötigt werden, und diese View-Modelle haben Ihre Validierungsattribute. Sie ordnen dann in Ihrer Geschäftslogik Ihre Ansichtsmodelle Ihren Datenmodellen zu.

Wenn Sie jedoch daran gebunden sind, Ihre Datenmodelle in Ihren Ansichten zu verwenden, verwenden Sie sogenannte Buddy-Klassen, um den Metadatenklassen Validatoren hinzuzufügen.

http://hartzer.wordpress.com/2010/01/26/mvc-buddy-class/

Schließlich, wenn Sie zuerst-Code gehen wollen, werden Sie feststellen, dass Code Erste zuerst ganz anders als Datenbank funktioniert. Während Sie die generierten Entitäten übernehmen und sie dann Code-Zuordnungen zuordnen können, ist es viel einfacher, das Entity Framework Power Tools CTP1 zu verwenden, um Ihre Datenbank zu einem Code-First-Model zurückzuentwickeln, da dadurch auch Ihre Zuordnungen erstellt werden.

+0

Ich habe mir Klassenbudies und die Metadaten angeschaut. Scheint sehr hilfreich, und ich könnte es verwenden, um es mit der Code-Generierung zu kombinieren (wenn ich bei diesem Ansatz bleibe). Danke, dass du dir die Zeit genommen hast. –

1

Wenn Sie wirklich einen Code-First-Ansatz machen, bedeutet das, dass "der Code der Boss ist". Sie sollten Code-Generatoren nicht wiederholt ausführen, um Ihren Code zu aktualisieren. Sie sollten POCOs direkt selbst aktualisieren.

Natürlich, Code-Generierung von POCOs aus einer db zu Beginn eines Projekts kann sinnvoll sein, sparen Sie eine Menge Arbeit. Aber plane es nicht weiter - du bekommst die Probleme, die du erwähnt hast.

Wenn Sie eine "Datenbank zuerst" -Ansatz machen wollten, nehmen Sie Änderungen in der db vor, und Ihre POCOs sind eine sekundäre Sache, neu generiert - irgendwie verwirrend, wer der "Boss" ist.

Also ich denke, es macht Sinn, (wie Sie sagen) "generierte pocos behalten und Code ersten Ansatz für die Verwaltung neuer Felder, Validierung Attribute (und so weiter ...)" verwenden.

Wie werden die Änderungen an POCOs meine Datenbanktabellen aktualisieren? - Es sollte nicht, es sei denn, Sie haben etwas eingestellt, um die db zu regenerieren.

Hinweis: Ich komme aus einem NHibernate Hintergrund, nicht EF, aber die gleichen Konzepte gelten.

+0

Ich stimme zu, dass der Running Code Generator am Anfang für das Reverse Engineering eines DBs nützlich ist.Und dann, nicht ganz relevant, sich auf diesen Prozess zu verlassen. Es scheint sowieso, dass Codefirst die Datenbank neu generieren soll. Ich muss in dieser Funktionalität graben. –

+1

@AntoineM - Code hat zunächst mehrere Methoden, von denen die Datenbank bei jeder Änderung neu generiert wird. Die kürzlich veröffentlichte 4.3-Version unterstützt die so genannte "Migrations" -Unterstützung und ermöglicht es Ihnen, Skripts zu erstellen, um die Datenbank zu ändern, anstatt sie neu zu generieren. –

Verwandte Themen