2016-08-02 6 views
0

Я начал использовать StackExchange mini profiler и хотел использовать его с базой данных оракула.
Но исключение бросается при запуске запроса-
Как получить параметры OracleCommand из ProfiledDbCommand

Unable to cast object of type 'StackExchange.Profiling.Data.ProfiledDbCommand' to type 'Oracle.ManagedDataAccess.Client.OracleCommand'.

создать новое соединение:

this._oracleConnection = new OracleConnection(ConnectionString.Oracle); 
this._dbConnection = new StackExchange.Profiling.Data.ProfiledDbConnection(this._oracleConnection, MiniProfiler.Current); 


метод, в котором я выполнить запрос:

private long InsertData(SomeModel model, long someId, DbConnection conn) 
{ 
    OraDynamicParams insrtParams = this.GetSomeParams(model); 
    insrtParams.Add("a_some_id", someId); 
    insrtParams.Add("cur_OUT", dbType: OracleDbType.RefCursor, direction: ParameterDirection.Output); 
    dynamic res = conn.Query("SOME_CRUD.INSERT_PROC", insrtParams, commandType: CommandType.StoredProcedure).First(); 

    //... 
} 

Примечание: OraDynamicParams это просто класс, который наследует от SqlMapper.IDynamicParameters.

В следующем методе исключение при попытке бросить в OracleCommand:

void SqlMapper.IDynamicParameters.AddParameters(IDbCommand command, SqlMapper.Identity identity) 
{ 
    var oracmd = (OracleCommand)command; // exception! 
    this.AddParameters(oracmd, identity); 
} 

Как это исправить?

ответ

0

Я нашел решение для своей проблемы.

Похоже, что внутри StackExchange.Profiling.Data.ProfiledDbCommand есть свойство InternalCommand, которое имеет тип OracleCommand. Оттуда вы можете получить все добавленные параметры.

После изменения кода это выглядит примерно так:

void SqlMapper.IDynamicParameters.AddParameters(IDbCommand command, SqlMapper.Identity identity) 
{ 
    // Checks if profiler is used, if it is, then retrieve `InternalCommand` property 
    dynamic oracmd = command is OracleCommand ? command : ((ProfiledDbCommand)command).InternalCommand; 
    this.AddParameters((OracleCommand)oracmd, identity); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^