存储过程中的企业库缓存参数?

我正在尝试与同事一起标准化一些数据访问代码。 上述同事之一断言,EntLib数据访问块试图在存储的proc调用上缓存参数。

我看过reflection器,有一些证据表明它可以缓存它们。 但我不认为它会在以下情况下发生。

public Dictionary GetQueue(int maxItems) { var sq = new SqlDatabase(_connString.ConnectionString); var result = new Dictionary(); using (var cmd = (SqlCommand)sq.GetStoredProcCommand("dbo.GetQueue")) { sq.AddInParameter(cmd, "maxItems", DbType.Int32, maxItems); var reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); while (reader.Read()) { long id = reader.GetInt64(reader.GetOrdinal("id")); string fileName = reader.GetString(reader.GetOrdinal("meta_data_filename")); result.Add(id, fileName); } } return result; } 

任何人都可以确认或否认这个吗?

我正在使用EntLib 4.1

它绝对习惯了,我把代码撕掉了,扔进了我的图书馆。

它使用sp_help并解析输出以确定数据类型。

这些天,我把代码撕掉了,.Net在添加参数方面要好得多。

 cmd.Parameters.AddWithValue("@name",somevalue) 

在你的例子中你保持反思…你会发现它在这条路径下完成GetStoredProcCommand()

您将获得一个已经填充参数的Command对象

ent lib代码受版权保护,但代码几乎与此相同

http://code.google.com/p/dbdotnet/source/browse/trunk/ParameterCache.cs

据我所知,它不会缓存参数。 使用相同的Database对象实例,我在运行跟踪时多次调用DiscoverParameters。 每次我调用DiscoverParameters时,我都可以看到[sys]。[sp_procedure_params_100_managed]所以看起来每次都要进行往返。

这是一个如何自己做的例子,似乎它可能没问题:

http://davidhayden.com/blog/dave/archive/2006/11/03/CachingStoredProcedureParameters.aspx