2009-07-31 11 views
2

Beim Ausführen der Vorlagen gegen eine Datenbank mit 1400 + Tabellen bekomme ich den folgenden Fehler. Der Server zeigt Hunderte von Verbindungen. Weiß jemand, ob dies ein Problem mit der generierten Vorlage oder speziell mit diesen Vorlagen ist? Andere, kleinere DBs erzeugen für mich ok.SubSonic 3.0.0.3 t4 Vorlagengenerierung auf Lager Datenbank läuft aus Verbindungen

Laufende Umwandlung: System.InvalidOperationException: Timeout abgelaufen. Die Zeitüberschreitung ist abgelaufen, bevor eine Verbindung vom Pool erhalten wurde. Dies ist möglicherweise der Fall, weil alle gepoolten Verbindungen verwendet wurden und die maximale Poolgröße erreicht wurde.

bei System.Data.ProviderBase.DbConnectionFactory.GetConnection (DbConnection owningConnection) bei System.Data.ProviderBase.DbConnectionClosed.OpenConnection (DbConnection outerConnection, DbConnectionFactory connection) bei System.Data.SqlClient.SqlConnection.Open() bei Microsoft.VisualStudio.TextTemplating8D8967BD3E8719BDA6DD9945992440F1.GeneratedTextTransformation.GetCommand (String sql) in C: \ POS \ POS.Win \ Templates \ SQLServer.ttinclude: Zeile 13 bei Microsoft.VisualStudio.TextTemplating8D8967BD3E8719BDA6DD9945992440F1.GeneratedTextTransformation.LoadFKTables (String tablename) in c: \ POS \ POS.Win \ Templates \ SQLServer.ttinclude: Zeile 179 bei Microsoft.VisualStudio.TextTemplating8D8967BD3E8719BDA6DD9945992440F1.Genera tedTextTransformation.LoadTables() in c: \ POS \ POS.Win \ Vorlagen \ SQLServer.ttinclude: Zeile 131 bei Microsoft.VisualStudio.TextTemplating8D8967BD3E8719BDA6DD9945992440F1.GeneratedTextTransformation.TransformText() in c: \ POS \ POS.Win \ Vorlagen \ ActiveRecord. tt: line 21

Antwort

1

Nun, ich könnte vorschlagen, dass T4 auf 1400 Tabellen laufen ist wahrscheinlich nicht die beste Idee. In Anbetracht dessen - können Sie den T4-Code (in SQLServer.tt) auslesen, um zu sehen, wie wir die Tabellen laden (in LoadTables) und die Verbindungen nach Bedarf behandeln.

1400 generierten Klassen - würden Spaß machen, um die Dateigröße der endgültigen Ausgabe zu erraten ...

+0

SubSonic 2.1 behandelt es einfach gut. – jcomet

+0

Es ist eine andere app_domain und anderer Code. Wie ich schon erwähnt habe - der Code ist genau dort in den T4-Vorlagen - optimiere für deine 1400 Tische :) –

+0

Natürlich hast du recht und ich schätze deine Führung sehr. – jcomet

0

Ich hatte das gleiche Problem mit einer sehr großen Datenbank (vielen Tabellen, Ansichten und SPs). Ich habe Folgendes zu meiner Verbindungszeichenfolge web.config für Sql Server 2005 hinzugefügt: Connect Timeout = 60;

Dies schien den Trick zu tun.

Sie können auch durch die .tt und .ttinclude Dateien graben und setzen Sie auch die cmd.CommandTimeout.

Auch hier ist die const für bestimmte Tabellen zu setzen:

const string TABLE_SQL = @ "SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' und table_name = 'myTableA' oder table_name = . 'myTableB'

8

ich hatte genau dieses Problem mit einer 250 Tabelle Datenbank Stochern der SQLServer.ttinclude, fand ich diese:

var cmd=GetCommand(sql); 
cmd.Parameters.AddWithValue("@tableName",table); 
var result=cmd.ExecuteScalar(); 
cmd.Dispose(); 
if(result!=null) 
    pk=result.ToString(); 

es zu dieser Änderung:

Die Verbindung wurde nicht geschlossen und Sie haben keine Verbindungen im Pool nach 100. Jede Datenbank mit mehr als 100 Tabellen würde dieses Problem treffen. Es ist ziemlich beeindruckend, dass ich das beheben konnte, ohne SubSonic.Core zu berühren.

Jetzt, wenn ich nur die Zeit verbringen kann, um Git herauszufinden, würde ich diese Reparatur zurück zum Unterschallprojekt veröffentlichen.:-D

+0

will nur ich brauchte, awesomeness :) –

+0

Sehr hilfreich, danke! – Jemes

+0

Was ist die Bedeutung von "if (table ==" tbl_Address ") hier? –

Verwandte Themen