2 Stimmen

Erstellen von ASP.NET-Mitgliedschaftstabellen mit Tarantino-Datenbankverwaltung

Ich führe Tarantino Database Management in ein Projekt ein, das ein brandneues Datenbankschema hat. Die einzige Änderung (befindet sich in 0001_InitialSchema.sql) ist die Erstellung der Tabellen, die in ASP.NET Membership verwendet werden. Ich habe die Tabellen mit aspnet_regsql.exe generiert und dann als CREATE TO-Skripte skriptiert, die ich dann in meine einzige Tarantino-SQL-Datei kombiniert habe.

Beim Ausführen meines NAnt-Build-Skripts scheitert der drop database-Befehl, wenn versucht wird, alle Verbindungen von der Datenbank zu trennen, die er zu löschen versucht.

Verbindungen trennen für Datenbank DBName

[call] Ein Fehler ist aufgetreten beim Ausführen einer Transact-SQL-Anweisung oder -Batch.

[call] Nur Benutzerprozesse können beendet werden.

Dies führt dazu, dass der folgende create database-Schritt fehlschlägt, da die Datenbank noch existiert und keine neuen Updates angewendet werden können:

ManageSqlDatabase:

Erstelle DBName auf localhost unter Verwendung von Skripten aus Pfad\zu\Quelle\src\Datenbank

BAUFEHLER - 1 nicht schwerwiegender Fehler, 0 Warnungen

INTERNER FEHLER

Microsoft.SqlServer.Management.Common.ExecutionFailureException: Ein Fehler ist aufgetreten beim Ausführen einer Transact-SQL-Anweisung oder -Batch. ---> System.Data.SqlClient.SqlException: Datenbank 'DBName' existiert bereits. Wählen Sie einen anderen Datenbanknamen.

Irgend ein Systemprozess bleibt immer mit der Datenbank verbunden, auch lange nachdem das Skript ausgeführt wurde. Ich habe versucht, dies auf verschiedenen Rechnern auszuführen und das gleiche Problem besteht. Ich habe auch versucht, ein anderes Tarantino-Projekt auszuführen, und es läuft jedes Mal einwandfrei. Ich habe sogar eine Dummy-Update-Datei erstellt (die Tabellen Foo, Bar usw. hinzufügte), die auch ohne Probleme ausgeführt wurde. Das Problem scheint von den CREATE TABLE-Skripten für die ASP.NET Membership-Tabellen zu kommen.

Sie können eine Kopie des SQL-Update-Skripts finden, das unter bei PasteBin ausgeführt wurde (aufgrund seiner Länge vom Beitrag getrennt).

2voto

Remus Rusanu Punkte 280155

Das wäre anscheinend ein Fehler in Tarantino. Wenn Sie sich DropConnections.sql ansehen, werden Sie feststellen, dass der Autor auf den alten Mythos reingefallen ist, dass jede Sitzung über 50 eine Benutzersitzung ist. Der richtige Weg, Benutzersitzungen zu identifizieren (und somit KILL-bare Sitzungen), besteht darin, die is_user_process-Spalte in sys.dm_exec_sessions zu überprüfen.

0 Stimmen

Ich werde DropConnections.sql bearbeiten, um nur Benutzerprozesse zu beenden, und auf diese Frage zurückkommen, wenn ich fertig bin.

0 Stimmen

Ich habe das Skript geändert, um is_user_process zu verwenden, und habe auch sichergestellt, dass ich die neueste Tarantino-Version hatte. Es scheint jetzt zu funktionieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X