2

对具有 1400 多个表的数据库运行模板时,出现以下错误。服务器显示数百个连接。有谁知道这是一般模板生成的问题,还是这些模板的具体问题。其他较小的数据库对我来说可以生成。

运行转换:System.InvalidOperationException:超时已过期。在从池中获取连接之前超时时间已过。这可能是因为所有池连接都在使用中并且达到了最大池大小。

在 System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) 在 System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) 在 System.Data.SqlClient.SqlConnection.Open() 在 Microsoft.VisualStudio.TextTemplating8D8967BD3E8719BDA6DD9945992440F1。 GeneratedTextTransformation.GetCommand(String sql) in c:\POS\POS.Win\Templates\SQLServer.ttinclude: 第 13 行 Microsoft.VisualStudio.TextTemplating8D8967BD3E8719BDA6DD9945992440F1.GeneratedTextTransformation.LoadFKTables(String tableName) 在 c:\POS\POS.Win\Templates \SQLServer.ttinclude:Microsoft.VisualStudio.TextTemplating8D8967BD3E8719BDA6DD9945992440F1.GeneratedTextTransformation.LoadTables() 中的第 179 行 c:\POS\POS.Win\Templates\SQLServer.ttinclude:Microsoft.VisualStudio 中的第 131 行。c:\POS\POS.Win\Templates\ActiveRecord.tt:第 21 行中的 TextTemplating8D8967BD3E8719BDA6DD9945992440F1.GeneratedTextTransformation.TransformText()

4

3 回答 3

8

我在 250 个表的数据库中遇到了这个确切的问题。浏览 SQLServer.ttinclude,我发现了这个:

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

将其更改为:

using (var cmd=GetCommand(sql))  
{  
        cmd.Parameters.AddWithValue("@tableName",table);  
        int x = 0;  
 if (table == "tbl_Address")  
  x++;  
 var result=cmd.ExecuteScalar();  

 if(result!=null)  
  pk=result.ToString();     

 cmd.Connection.Close();      
} 

连接没有关闭,并且池中的连接在 100 之后用完了。任何超过 100 个表的数据库都会遇到这个问题。我可以在不触及 SubSonic.Core 的情况下解决这个问题,真是太棒了。

现在,如果我能花时间弄清楚 Git,我会将这个修复发布回亚音速项目。:-D

于 2009-11-18T20:30:45.417 回答
1

好吧,我可能建议在 1400 个表上运行 T4 可能不是最好的主意。鉴于此 - 您可以探索 T4 代码(在 SQLServer.tt 中)以查看我们如何加载表(在 LoadTables 中)并根据需要调整连接。

生成了 1400 个类 - 猜测最终输出的文件大小会很有趣......

于 2009-08-01T00:27:49.347 回答
0

对于一个非常大的数据库(很多表、视图和 SP),我也遇到了同样的问题。我在 Sql Server 2005 的 web.config 连接字符串中添加了以下内容 - Connect Timeout=60;

这似乎奏效了。

您还可以挖掘 .tt 和 .ttinclude 文件并设置 cmd.CommandTimeout 。

此外,这是为特定表设置的 const:

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

于 2009-11-05T21:40:34.693 回答