2009-03-14 7 views
2

Welche Methode verwenden Sie, um einen Kompilierzeitfehler zu erhalten, wenn die Datenbankschemaänderungen in einem ASP.NET-Projekt auftreten?Wie bekomme ich einen Fehler bei der Kompilierung, wenn sich das Datenbankschema ändert?

Wenn zum Beispiel ein GridView an eine DataSource gebunden ist, kann ich nur Laufzeitfehler erhalten, wenn eine Schemaänderung auftritt, nicht ein Kompilierzeitfehler. Intellisense funktioniert gut mit dem Code, der hinter der Verwendung von Datasets, LINQ usw. steht, aber ich kann anscheinend keinen Fehler bei der Kompilierung auf einer ASP.NET-Seite bekommen, wenn ich das Schema ändere.

Irgendwelche Ratschläge?

Antwort

2

Erstellen Sie einen Komponententest, der die Korrektheit Ihrer Datenzugriffsebene überprüft, und stellen Sie sicher, dass der gesamte DB-Code abgedeckt ist. Nicht alles kann zur Kompilierungszeit abgefangen werden ...

+0

+1 für den gesunden Menschenverstand. – Kev

1

Eine Möglichkeit, wie ich dieses Verhalten leicht erreichen könnte, wäre eine Datenverbindung zu einem dynamischen DAL. Es gibt einige Tools, die diese DAL-Generation unterstützen können. Ich würde empfehlen, einen Blick auf SubSonic zu werfen.

Sobald Sie etwas wie SubSonic an Ort und Stelle haben, können Sie sich an die resultierenden Geschäftsobjekte binden. Diese Business-Objekte ändern sich automatisch bei einer Änderung des Schemas in der Datenbank und dies unterbricht Ihren Bindungscode, was zu einem Fehler bei der Kompilierung führt.

aktualisieren

Assaf Empfehlung Unit Tests zu verwenden, ist auch eine gute Idee. Es löst nicht Ihr angegebenes Problem, aber es ist definitiv etwas, das an Ort und Stelle sein sollte und ein großartiges Werkzeug für die Kennzeichnung dieser Art von Problemen ist.

+0

Die DAL wird neu generiert, wenn sie als Build-Task eingerichtet wurde, sonst wird sie nicht gespeichert. Sie können das Datenbankschema weiterhin ohne Codegenerierung ändern. Ich stimme zu, dass es definitiv einfacher ist, die Änderungen zu verfolgen, wenn Sie daran denken, die DAL-Klassen neu zu generieren. –

+0

Ich benutze es momentan noch nicht in Projekten, aber ich bin mir ziemlich sicher, dass SubSonic dynamische Generierung verwendet, so dass Sie nicht manuell aktualisieren müssen. –

0

Wir verwenden ein bescheidenes System (XML bis C++), um Schemata aus einer unabhängigen Beschreibung zu erstellen. Dieses System erstellt auch Namen für Tabellen und Spalten, die wir innerhalb des Codes verwenden Es gibt eine Änderung im Schema, die Namen ändern sich, da die Namen, die wir ursprünglich verwendet haben, nicht mehr da sind und der Compiler einen Fehler melden wird.

Sie könnten wahrscheinlich viele DAO-Generierungstools so konfigurieren, dass sie etwas Ähnliches tun.

0

Eine Lösung wäre, Ihre Datenbank zu versionieren und einen Anwendungs-Build einer bestimmten Version (möglicherweise in einer Eigenschaftendatei) zuzuordnen. Im Einstiegspunkt Ihrer App können Sie die erwartete Version mit der tatsächlichen Version vergleichen und den Fehler entsprechend behandeln.

Ich bin mir nicht sicher, was das Äquivalent in ASP.NET von Migrations in Rails oder dbdeploy in Java für die Versionierung Ihrer Datenbank ist. Aber jedes DB-Versionierungswerkzeug, das Schemaänderungen inkrementell und versioniert vornimmt und die Version in einer Versionstabelle verfolgt, wird dem Zweck gerecht.

Wenn Sie jedoch beim Kompilieren Ihrer App einen Kompilierungsfehler erhalten möchten, können Sie Ihr Schema im Rahmen des Buildprozesses auf die neueste Version aktualisieren und so die Möglichkeit von Schemaänderungen vermeiden.

Verwandte Themen