1

我正在将使用 ADO.NET/ODP.NET 的代码迁移到 Enterprise Library 6.0。我正在使用增加对 ODP.NET 支持的 EntLibContrib 项目。在 ADO.NET 代码中进行了一些优化,我正在尝试确定如何使用 EL 调用这些属性。

ADO.NET 看起来像这样:

 using (OracleConnection conn = new OracleConnection(_connectionString))
 {
     using (OracleCommand cmd = new OracleCommand(command, conn))
     {
          cmd.CommandType = CommandType.Text;
          cmd.InitialLOBFetchSize = -1;

          cmd.Connection.Open();
          OracleDataReader reader = cmd.ExecuteReader();
          reader.FetchSize = reader.RowSize * 1000;
          reader.Read();

         [...]
    }
}

EL 代码如下所示:

var database = new DatabaseProviderFactory().CreateDefault();

using (var reader = database.ExecuteReader(CommandType.Text, command))
{
 [...]
}

我也在更新存储过程以及这里的例子。

ADO.NET:

using (OracleConnection conn = new OracleConnection(_connectionString))
{
  using (OracleCommand cmd = new OracleCommand(command, conn))
  {
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add("pID", OracleDbType.Int32).Value = eID;
    OracleParameter pResults = cmd.Parameters.Add("pResults", OracleDbType.RefCursor, ParameterDirection.Output);

    cmd.Connection.Open();
    cmd.ExecuteNonQuery();

    using (OracleRefCursor cursor = pResults.Value as OracleRefCursor)
    {
        using (OracleDataReader reader = cursor.GetDataReader())
        {
           reader.FetchSize = reader.RowSize * 1000;

           while (reader.Read())
           {
             [...]
           }

致 EL:

var database = new DatabaseProviderFactory().CreateDefault();

using (var reader = database.ExecuteReader("SS.SP_GET_TASKDATA_BY_PRAC", practiceID, firstRow, lastRow))
{
  while (reader.Read())
  {
     [...]
  }

如何使用我的 EL 代码设置 FetchSize 和 InitialLOBFetchSize 属性?

4

1 回答 1

0

我想这早就解决了,但我认为您可以执行以下操作(至少使用 EF5,不确定 6):

SQL 查询

var cmd = database.GetSqlStringCommand(command);
var ocmd = (OracleCommand)cmd;
ocmd.InitialLOBFetchSize = -1;

using (var reader = database.ExecuteReader(cmd))
{
  ...
}

存储过程

var cmd = database.GetStoredProcCommand("SS.SP_GET_TASKDATA_BY_PRAC", practiceID, firstRow, lastRow );

var ocmd = (OracleCommand)cmd;
ocmd.InitialLOBFetchSize = -1;

using (var reader = database.ExecuteReader(cmd))
{
...
}

编辑:您也可以以相同的方式在 ocmd 上设置 FetchSize。

于 2014-09-15T14:12:17.907 回答